0

我知道关于用户模型的扩展有很多关于 SO 的相关问题。就我而言,我使用django-allauth的是CustomUser继承自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)
4

3 回答 3

1

您需要将其设置null=True为工作数据库级别。例子:

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

如果你想要这些字段是必需的,你需要覆盖下面的 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')
        }),
    )
于 2019-08-22T13:24:02.247 回答
1

只需覆盖下面的 first_namelast_name字段,并使它们为 null=True,blank=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)
     .........
     .........
于 2019-03-11T15:07:21.107 回答