from django.views.generic.edit import UpdateView from django.views.generic import ListView from musicians.models import Musician from django import forms from django.http import HttpResponseRedirect from django.shortcuts import render from django.shortcuts import get_object_or_404 class MusicianList( ListView): model = Musician class UserEditForm(forms.ModelForm): email = forms.EmailField() def __init__(self, *args, **kw): if 'instance' in kw.keys(): user = kw['instance'].user initVals = { 'email': user.email } if not 'initial' in kw.keys(): kw['initial'] = initVals else: kw['initial'].update(initVals) super(UserEditForm, self).__init__( *args, **kw ) self.fields.keyOrder.remove('email') self.fields.keyOrder.insert(2, 'email') def save(self): if self.is_valid(): super(UserEditForm,self).save() self.instance.user.email = self.cleaned_data['email'] self.instance.user.save() class Meta: model = Musician exclude = [ 'user','image', 'instrument' ] #fields = '__all__' def user_edit( request, username ): musician = get_object_or_404( Musician, user__username=username ) if request.method == 'POST': # If the form has been submitted... form = UserEditForm(request.POST) # A form bound to the POST data form.instance = musician if form.is_valid(): # All validation rules pass form.save() return HttpResponseRedirect('/musicians/' + username) # Redirect after POST else: form = UserEditForm( instance= musician ) return render(request, 'musicians/musician_edit.html', { 'form': form, } ) class MusicianUpdate( UpdateView ): model = Musician #fields = [] template_name = "musicians/musician_edit.html" success_url = '/books/'