模型.py
class CustomUser(AbstractUser):
username = None
email = models.EmailField(_('email address'), unique=True)
mobileno = models.IntegerField(blank=True, null=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
customer = models.BooleanField(default=False)
vendor = models.BooleanField(default=False)
id = models.AutoField(primary_key=True, editable=False)
userid= models.CharField(max_length=100, unique=True)
objects = UserManager()
def __str__(self):
return self.email
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.vendor == True and self.is_superuser == False:
if not self.userid:
self.userid = "VEN" str(self.id (10 ** 5)) # generating the uid and allocating the value
self.userid.save()
else:
pass
else:
pass
表格.py
class CustomUserCreationForm(UserCreationForm):
"""
A Custom form for creating new users.
"""
class Meta:
model = CustomUser
fields = ['email','first_name','last_name','mobileno']
def save(self, commit=True):
user = super().save(commit=False)
user.customer = True
if commit:
user.save()
return user
""" For Vendor users forms"""
class VendorCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ['email','first_name','last_name','mobileno']
def save(self, commit=True):
user = super().save(commit=False)
user.vendor = True
if commit:
user.save()
return user
視圖.py
#Vendor Signup
def VendorSignup(request):
vendorform = VendorCreationForm()
if request.method == 'POST':
vendorform = VendorCreationForm(request.POST)
if vendorform.is_valid():
new_user = vendorform.save()
new_user.is_active = False
new_user.save()
return redirect('login')
else:
vendorform = VendorCreationForm()
return render(request, 'vendor/signup.html', {'vendorform': vendorform})
我只想在(他們使用 vendorform 注冊)時為供應商用戶生成一個 customID(以 VEND0001 開頭),并且不應該為客戶和超級用戶生成 customid。我在模型中有錯誤。有人可以請幫我解決這個問題。
我遇到了問題(唯一約束失敗:customer_customuser.userid)。
uj5u.com熱心網友回復:
也許我錯了,但我認為當你這樣做時:
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.vendor == True and self.is_superuser == False:
if not self.userid:
self.userid = "VEN" str(self.id (10 ** 5)) # generating the uid and allocating the value
self.userid.save()
else:
pass
else:
pass
在 super().save 中沒有必須的用戶 ID 資訊。也許userid= models.CharField(max_length=100, unique=True, null=True)會起作用……但請注意 NULL != NULL。
然后
if not self.userid改為if self.userid is None:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/361115.html
標籤:Python 姜戈 django 模型 django-views django-forms
上一篇:javascriptmenutoggle中的foreach應該在我單擊的圖示中處于活動狀態
下一篇:如何查詢過濾器自己的外鍵
