Ошибка при сохранении нескольких форм (с одним полем) в django views.py. pls, Нужен правильный рабочий вид или предложение
models.py
class CustomUser(AbstractUser):
username = None
email = models.EmailField(_('email address'), unique=True)
mobileno = models.IntegerField(blank=True, null=True)
is_customer = models.BooleanField(default=False)
is_vendor = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
class VendorDetails(models.Model):
vendoruser = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
aadhar_number = models.CharField(max_length=200)
pan_number = models.CharField(max_length=200)
store_name = models.CharField(max_length=200)
brand_name = models.CharField(max_length=200)
mail_id = models.EmailField(max_length=200)
contact_no = models.IntegerField(blank=True, null=True)
gst_number = models.CharField(max_length=100)
acct_number = models.CharField(max_length=100)
ifsc_code = models.CharField(max_length=100)
fb_account = models.CharField(max_length=100,blank=True, null=True)
insta_account = models.CharField(max_length=100,blank=True, null=True)
website = models.CharField(max_length=100,blank=True, null=True)
door_no = models.CharField(max_length=100,blank=True, null=True)
street_name = models.CharField(max_length=100, blank=True, null=True)
city = models.CharField(max_length=100, blank=True, null=True)
pincode = models.IntegerField(blank=True, null=True)
def __str__(self):
return self.mail_id
forms.py
class UserCreationForm(UserCreationForm):
"""
A Custom form for creating new users.
"""
class Meta:
model = CustomUser
fields = ['email','first_name','last_name','mobileno']
""" For Vendor users forms"""
class VendorAdminDetailsForm(forms.ModelForm):
class Meta:
model = VendorDetails
fields = ['aadhar_number', 'pan_number']
class VendorStoreDetailsForm(forms.ModelForm):
class Meta:
model = VendorDetails
fields = ['store_name', 'brand_name', 'mail_id', 'contact_no', 'gst_number']
class VendorBankDetailsForm(forms.ModelForm):
class Meta:
model = VendorDetails
fields = ['acct_number', 'ifsc_code']
class VendorSocialMediaDetailsForm(forms.ModelForm):
fb_account = forms.CharField(required=False)
insta_account = forms.CharField(required=False)
website = forms.CharField(required=False)
class Meta:
model = VendorDetails
fields = ['fb_account', 'insta_account', 'website']
class VendorContactDetailsForm(forms.ModelForm):
door_no = forms.CharField(required=False)
street_name = forms.CharField(required=False)
pincode = forms.IntegerField(required=False)
class Meta:
model = VendorDetails
fields = ['door_no', 'street_name', 'city', 'pincode']
views.py
#Vendor Signup
def VendorSignup(request):
form = UserCreationForm()
vendordetail = VendorAdminDetailsForm()
vendorstore = VendorStoreDetailsForm()
vendorbankdetail = VendorBankDetailsForm()
vendorsocialmedia = VendorSocialMediaDetailsForm()
vendorcontact = VendorContactDetailsForm()
if request.method == 'POST':
form = UserCreationForm(request.POST)
vendordetail = VendorAdminDetailsForm(request.POST)
vendorstore = VendorStoreDetailsForm(request.POST)
vendorbankdetail = VendorBankDetailsForm(request.POST)
vendorsocialmedia = VendorSocialMediaDetailsForm(request.POST)
vendorcontact = VendorContactDetailsForm(request.POST)
if form.is_valid() and vendordetail.is_valid() and vendorstore.is_valid() and vendorbankdetail.is_valid() and vendorsocialmedia.is_valid() and vendorcontact.is_valid():
form.save()
print("form")
vendordetail.save()
vendorstore.save()
vendorbankdetail.save()
vendorsocialmedia.save()
vendorcontact.save()
return redirect('login')
else:
form = UserCreationForm()
vendordetail = VendorAdminDetailsForm()
vendorstore = VendorStoreDetailsForm()
vendorbankdetail = VendorBankDetailsForm()
vendorsocialmedia = VendorSocialMediaDetailsForm()
vendorcontact = VendorContactDetailsForm()
Я создал несколько форм для регистрации с расширением модели abstractuser. также я поместил все эти формы в шаблон отдельно. Правильный ли это способ работы с несколькими формами. Столкнулся с проблемой в строке (vendordetail.save()) Не нулевое поле (проблема, связанная с onetoonefield). Но я не знаю, как написать представления для всех этих форм. Пожалуйста, помогите мне решить эту проблему.
Где вы вставляете правильный vendoruser
? Это должно быть заполнено до вызова save().
Вам нужно сделать что-то вроде:
vendordetail.instance.vendoruser = request.user
Если действительно vendoruser
является пользователем, который в настоящее время вошел в систему, в противном случае вам нужно получить его откуда-то еще. После вставки вы можете вызвать:
vendordetail.save()
Edit: Я пропустил, что вы создаете пользователя на той же странице в другой форме. В таком случае вы можете сначала сохранить вашу форму пользователя:
new_user = form.save()
Метод save() формы модели возвращает новый объект, поэтому вы можете использовать его затем для других форм:
vendordetail.instance.vendoruser = new_user