我正在使用自定義 django 用戶模型。我已經創建了一切,一切似乎都很完美,直到我嘗試從模板上的注冊頁面呼叫 create_user。它是在不考慮我放置在模型中的驗證器的情況下創建用戶。在我嘗試使用 create_user 操作之前,驗證器作業正常。
def validate_reg(value):
try:
x = SignUpAccess.objects.get(reg_key=value)
if x.is_used == True:
raise ValidationError(
message='Your validation number is used already',
)
except SignUpAccess.DoesNotExist:
raise ValidationError(
message='Your validation number does not exist',
)
class User(AbstractUser):
username = None
email = models.EmailField(
unique=True,
max_length=75,
# db_index=True,
primary_key=True,
verbose_name='email address'
)
reg_number = models.CharField(
max_length=12,
unique=True,
null=True,
validators=[validate_reg]
)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
date_joined = models.DateTimeField(default=timezone.now)
REQUIRED_FIELDS = []
USERNAME_FIELD = 'email'
objects = UserManager()
如上所示,我在注冊號中添加了一個驗證器,以確保只有擁有有效注冊號的人才能在網站上創建帳戶。當我嘗試從管理員創建用戶時,這非常有效(這真的毫無意義)。
與自定義用戶模型一樣,我有一個用戶管理器
class UserManager(BaseUserManager):
def create_user(self, email, first_name, last_name, reg_number, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
first_name=first_name,
last_name=last_name,
reg_number=reg_number,
)
user.set_password(password)
user.save()
return user
一切都應該正常作業,直到我嘗試在我的注冊視圖上創建一個用戶,
def register_user(request):
user = User
if request.method == "POST":
email = request.POST['email']
first_name = request.POST['first_name']
last_name = request.POST['last_name']
reg_number = request.POST['reg_number']
password = request.POST['password']
user.objects.create_user(
email,
first_name,
last_name,
reg_number,
password=password,
)
呼叫創建用戶,同時在模板上測驗它時,輸入無效的注冊號仍然會創建一個具有無效注冊號的用戶,這應該不起作用,因為模型本身在注冊欄位上有一個驗證器應該停止它。看起來 create_user 管理器正在繞過驗證器,請幫忙。
uj5u.com熱心網友回復:
你試過完全干凈嗎?
class MyModle(models.Model):
def save(self, *args, **kwargs):
try:
self.full_clean()
super(MyModle, self).save(*args, **kwargs)
except IntegrityError:
raise ValidationError("error message")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371703.html
下一篇:如何將資料庫資料顯示到您的網站?
