Как передать две формы из одного общего класса в django
Я хочу передать две формы в одном HTML шаблоне, у меня есть две разные модели User и 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')
Я хочу, чтобы обе формы отображались в моем шаблоне для сохранения информации о пользователе в модели User и Profile
Вы можете использовать MultiformView для использования нескольких форм в представлении формы.
Просмотрите этот пакет: https://github.com/TimBest/django-multi-form-view