我正在尝试在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:
我解决了我的问题,我所做的是将AbstractUser
从django.contrib.auth.models
复制到我的models.py
并更改了所需的字段。之后,我编辑了settings.py
添加了AUTH_USER_MODEL =' myApp.MyModelName'它。
以下是文档:https://docs.djangoproject.com/en/dev/topics/auth/customizing/
答案 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)
也许我误解了你的问题,你想要修改用户模型字段。
因为您无法更新用户模型声明,如果您愿意,可以选择以下选项:
user
字段之外设置其他字段以容纳它。User
继承模型,而不是使用组合,然后覆盖该字段。希望它有所帮助。
答案 1 :(得分:1)
如果您需要更改所需的属性或者您需要有关用户的其他数据,我建议您编写自己的用户模型,而不是另一个链接到Django的模型。文档在这里,并不太难:https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model