模型.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
表格.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']
視圖.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()
我通過擴展抽象用戶模型創建了多個用于注冊的表單。我也將所有這些表格分別放在模板中。這是處理多個表單的正確方法嗎?行中面臨的問題 (vendordetail.save()) 非空欄位(onetoonefield 相關問題)。但我不知道如何為所有表單撰寫視圖。請幫我解決這個問題。
uj5u.com熱心網友回復:
你在哪里插入正確的vendoruser?這需要在呼叫 save() 之前填寫。
您需要執行以下操作:
vendordetail.instance.vendoruser = request.user
如果確實vendoruser是當前登錄的用戶,則您需要從其他地方獲取它。插入后,您可以呼叫:
vendordetail.save()
編輯:我錯過了您正在以另一種形式在同一頁面上創建用戶的情況。在這種情況下,您可以先保存您的用戶表單:
new_user = form.save()
模型表單的 save() 方法將回傳新物件,因此您可以稍后將其用于其他表單:
vendordetail.instance.vendoruser = new_user
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/360215.html
標籤:Python 姜戈 django 模型 django-views django-forms
上一篇:在我的專案中邀請參加活動的問題
下一篇:根據CSV值移動檔案
