Django用户模型需要名字和姓氏

时间:2019-03-11 14:58:52

标签: django django-models django-forms

我知道SO上有许多与用户模型扩展有关的问题。就我而言,我将django-allauthCustomUser继承的AbstractUser模型一起使用。我想使用内置User模型的所有功能,因为一切都很好。我只是想通过覆盖这些模型字段上的现有first_name来使last_nameblank = True字段成为必需。

我看到的一些建议包括忽略内置字段,而仅在我的自定义模型中使用新的字段。这似乎与Python和Django的方式相反。

我的目标是在数据库/模型级别执行此操作,因为这将通过现有表单层叠验证。

是否有一种方法可以覆盖这两个模型字段的blank=True?我希望这两个字段是必填字段,否则必须遵守现有的AbstractUser要求。

修改 答案表明此结果具有所需的行为。我将这些行添加到模型中:

from django.utils.translation import gettext_lazy as _

first_name = models.CharField(_('first name'), max_length=30, blank=False, null=False)
last_name = models.CharField(_('last name'), max_length=150, blank=False, null=False)

3 个答案:

答案 0 :(得分:1)

您需要将null=True设置为数据库级别。 示例:

first_name = models.CharField(max_length=128, blank=True, null=True)
  1. :与数据库相关。定义是否给定的数据库列 是否接受空值。
  2. 空白:与验证相关。它 将在调用form.is_valid()时在表单验证期间使用。

答案 1 :(得分:1)

覆盖 名字姓氏字段,如下所示,并将它们设置为null = True,空白= True

CustomUser(AbstractUser):
     first_name= models.CharField(null=True, blank=True, max_length=100)
     last_name = models.CharField(null=True, blank=True, max_length=100)
     .........
     .........

答案 2 :(得分:0)

如果需要这些字段,则需要覆盖first_name和last_name字段,如下所示,并将它们设置为null = False,blank = False:

class User(AbstractUser):

    ...

    first_name = models.CharField(max_length=30, blank=False, null=False)
    last_name = models.CharField(max_length=150, blank=False, null=False)

    def __str__(self):
        return'{} {}'.format(self.first_name, self.last_name)

如果要进入管理员的注册页面,请包括以下字段:

@admin.register(User)
class UserAdmin(BaseUserAdmin):

    ...

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'first_name', 'last_name', 'password1', 'password2')
        }),
    )