我正在尝试在 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:
我解决了我的问题,我所做的是将
AbstractUser
从 django.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/