![](/img/trans.png)
[英]Django-Allauth - Errors with custom User model and custom Signup form
[英]how to generate a custom id for specific type of users when that user signup via django model form
模型.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
forms.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 時為供應商用戶生成一個 customID(以 VEND0001 開頭)。 我的模型有錯誤。 有人可以請,為我解決這個問題。
我遇到了問題(唯一約束失敗:customer_customuser.userid)。
也許我錯了,但我認為當你這樣做時:
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:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.