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

3 投票
2 回答
2761 浏览
提问于 2025-04-21 00:57

我正在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(姓氏)是可选的,而email(电子邮件)不是唯一的。我需要first_name和last_name是必填项,并且email在我的数据库中是唯一的,我该怎么做呢?

谢谢。

编辑 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/

2 个回答

1

如果你需要更改用户所需的属性,或者需要其他关于用户的数据,我建议你自己写一个用户模型,而不是使用Django自带的模型。相关的文档在这里,内容并不复杂:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

3

Django中的模型字段默认是 NOT NULL,也就是说这些字段不能留空。

如果你想让某个字段可以接受 NULL 值,可以使用 null=True 这个参数。

如果你想让字段可以接受空值(比如空字符串'',但不是NULL),可以使用 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 继承模型,而不是组合使用,然后重写这个字段。

希望这些对你有帮助。

撰写回答