在Django中设置django.contrib.auth.User的非必填字段
我正在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:
我解决了我的问题,我所做的是把AbstractUser
从django.contrib.auth.models
复制到我的models.py
中,并把字段改成必填的。之后我编辑了我的settings.py
,添加了AUTH_USER_MODEL = 'myApp.MyModelName'。
这里是文档链接:https://docs.djangoproject.com/en/dev/topics/auth/customizing/
2 个回答
如果你需要更改用户所需的属性,或者需要其他关于用户的数据,我建议你自己写一个用户模型,而不是使用Django自带的模型。相关的文档在这里,内容并不复杂:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model
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)
也许我误解了你的问题,你想修改用户模型的字段。
但是你不能直接更新用户模型的定义,如果你想这样做,可以考虑以下两种方法:
- 让其他字段来保存这些信息,放在
user
字段之外。 - 从
User
继承模型,而不是组合使用,然后重写这个字段。
希望这些对你有帮助。