簡體   English   中英

當用戶通過 django model 表單注冊時,如何為特定類型的用戶生成自定義 ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM