我正在尝试在 Django 上创建一个自定义注册表单,我的模型如下所示:

#models.py

class UserRegister(models.Model):

   user = models.ForeignKey(User)

   GENDER_CHOICES = (
       ('M', 'Male'),
       ('F', 'Female'),
       ('O', 'Other'),
   )

   birthday = models.DateField(null = False, blank=False)

   gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=False)

我正在阅读有关 models.User 的信息,我看到 first_name 和 last_name 是可选的,而电子邮件不是唯一的。我需要 first_name 和 last_name 是必需的属性,并且电子邮件在我的数据库中是唯一的,我该怎么做?

谢谢你。

编辑 1:
如果我从 User 继承模型,我的代码会是这样吗?
#models.py
class UserRegister(User):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField(unique=True)
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
        ('O', 'Other'),
    )
    birthday = models.DateField()
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)

编辑2:
我解决了我的问题,我所做的是将 AbstractUserdjango.contrib.auth.models 复制到我的 models.py 中,并将字段更改为必需的。之后,我编辑了我的 settings.py 添加 AUTH_USER_MODEL = 'myApp.MyModelName' 到它。

这是文档:https://docs.djangoproject.com/en/dev/topics/auth/customizing/

最佳答案

django 模型字段默认为 NOT NULL
如果您希望它允许 NULL 值,请使用 null=True 参数。

如果您希望它允许空值('' 但不为空),请使用 blank=True 参数。

如果您希望该字段是唯一的,请设置 unique=True

class UserRegister(models.Model):

    first_name = models.CharField(max_length=150, null=True, blank=True)
    last_name = models.CharField(max_length=150, null=True, blank=True)
    email = models.EmailField(unique=True)

也许我误解了你的问题,你想修改 User 模型字段。

并且因为您无法更新 User 模型声明,所以如果您想这样做,您有以下选择:
  • user 字段之外创建其他字段来保存它。
  • User 继承模型,不使用组合,然后覆盖该字段。

  • 希望能帮助到你。

    关于python - 在 Django 上从 django.contrib.auth.User 设置非必填字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25779379/

    10-11 20:44
    查看更多