在Django上设置django.contrib.auth.User中的非必填字段

时间:2014-09-11 04:58:26

标签: python django

我正在尝试在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)

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

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

2 个答案:

答案 0 :(得分:2)

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)

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

因为您无法更新用户模型声明,如果您愿意,可以选择以下选项:

  1. user字段之外设置其他字段以容纳它。
  2. User继承模型,而不是使用组合,然后覆盖该字段。
  3. 希望它有所帮助。

答案 1 :(得分:1)

如果您需要更改所需的属性或者您需要有关用户的其他数据,我建议您编写自己的用户模型,而不是另一个链接到Django的模型。文档在这里,并不太难:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model