Reputation: 37
I want to pass two forms in one HTML template, I have two different models User and profile
models.py:
class Profile(models.Model):
user = models.OneToOneField(User,null=True,on_delete=models.CASCADE)
home_phone = models.CharField(max_length=20, blank=True, null=True)
mobile_phone = models.CharField(unique=True, max_length=20,null=True)
personal_id = models.CharField(max_length=30, blank=True, null=True)
address_line_1 = models.CharField(db_column='address_Line_1', max_length=200,null=True) # Field name made lowercase.
address_line_2 = models.CharField(db_column='address_Line_2', max_length=200, blank=True, null=True) # Field name made lowercase.
city = models.CharField(max_length=50,null=True)
country_fk = models.ForeignKey('Country', models.DO_NOTHING, db_column='country_FK',null=True) # Field name made lowercase.
gender_fk = models.ForeignKey('Gender', models.DO_NOTHING, db_column='gender_FK',null=True) # Field name made lowercase.
bdate = models.DateField(blank=True,null=True)
def __str__(self):
return str(self.user)
members views.py
class UserEditView(generic.UpdateView):
form_class = EditProfileForm
template_name = 'registration/edit_profile.html'
success_url = reverse_lazy('home')
def get_object(self):
return self.request.user
members forms.py
class EditProfileForm(UserChangeForm):
email = forms.EmailField(widget=forms.EmailInput(attrs={'class':'form-control'}))
first_name = forms.CharField(max_length=100, required=True, widget=forms.TextInput(attrs={'class':'form-control'}))
last_name = forms.CharField(max_length=100, required=False,widget=forms.TextInput(attrs={'class':'form-control'}))
username = forms.CharField(max_length=100, required=False,widget=forms.TextInput(attrs={'class':'form-control'}))
class Meta:
model = User
fields = ('username','first_name','last_name','email','password')
class ProfileForm(ModelForm):
Years = [x for x in range(1940,2021)]
home_phone = forms.IntegerField(min_value=10000000,max_value=999999999,required=False,widget=forms.NumberInput(attrs={'class':'form-control'}))
mobile_phone = forms.IntegerField(min_value=10000000,max_value=999999999,required=False,widget=forms.NumberInput(attrs={'class':'form-control'}))
personal_id = forms.IntegerField(min_value=100000000000,max_value=9999999999999,required=False,widget=forms.NumberInput(attrs={'class':'form-control'}))
address_line1 = forms.CharField(max_length=100, required=True, widget=forms.TextInput(attrs={'class':'form-control'}))
address_line2 = forms.CharField(max_length=100, required=False,widget=forms.TextInput(attrs={'class':'form-control'}))
city = forms.CharField(max_length=100, required=True,widget=forms.TextInput(attrs={'class':'form-control'}))
Country = forms.ModelChoiceField(queryset=Country.objects,required=True,label=_('Country'))
gender = forms.ModelChoiceField(queryset=Gender.objects,required=True,label=_('Gender'))
bdate = forms.DateField(widget=forms.SelectDateWidget(years=Years))
class Meta:
model = Profile
fields = ('address_line_1','address_line_2','bdate','city','country_fk','gender_fk','home_phone','mobile_phone','personal_id')
I want both forms show in my template to save the user information in User model and Profile model
Upvotes: 1
Views: 46
Reputation: 1846
You can use a MultiformView to use multiple forms in a form view.
Checkout this package: https://github.com/TimBest/django-multi-form-view
Upvotes: 1