To use profile model with user form we need to initialize the form fields in the form. Then to get the values on edit we need to initialize __init__ function and passing the profile object from the view
Ex: forms.py
class SuperUserEditForm(forms.ModelForm):
birthday = forms.DateTimeField(input_formats=['%Y-%m-%d %I:%M %p'], required=False)
phone_number = forms.CharField(max_length=100, required=False, label="Home Phone")
cell_number = forms.CharField(max_length=100, required=False)
carrier = forms.ChoiceField(choices=CARRIERS, required=False)
def __init__(self, profile=None, *args, **kwargs):
super(SuperUserEditForm, self).__init__(*args, **kwargs)
if(profile):
self.fields['cell_number'].initial = profile.cell_number
self.fields['carrier'].initial = profile.carrier
self.fields['birthday'].initial = profile.birthday
self.fields['phone_number'].initial = profile.phone_number
Ex: views.py
form = SuperUserEditForm(profile=profile, instance=user)
on POST
form = SuperUserEditForm(data=request.POST, instance=user)
Ex: forms.py
class SuperUserEditForm(forms.ModelForm):
birthday = forms.DateTimeField(input_formats=['%Y-%m-%d %I:%M %p'], required=False)
phone_number = forms.CharField(max_length=100, required=False, label="Home Phone")
cell_number = forms.CharField(max_length=100, required=False)
carrier = forms.ChoiceField(choices=CARRIERS, required=False)
def __init__(self, profile=None, *args, **kwargs):
super(SuperUserEditForm, self).__init__(*args, **kwargs)
if(profile):
self.fields['cell_number'].initial = profile.cell_number
self.fields['carrier'].initial = profile.carrier
self.fields['birthday'].initial = profile.birthday
self.fields['phone_number'].initial = profile.phone_number
Ex: views.py
form = SuperUserEditForm(profile=profile, instance=user)
on POST
form = SuperUserEditForm(data=request.POST, instance=user)
0 Responses to Using multiple model in django form
Something to say?