我知道SO上有许多与用户模型扩展有关的问题。就我而言,我将django-allauth
与CustomUser
继承的AbstractUser
模型一起使用。我想使用内置User
模型的所有功能,因为一切都很好。我只是想通过覆盖这些模型字段上的现有first_name
来使last_name
和blank = 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)
答案 0 :(得分:1)
您需要将null=True
设置为数据库级别。
示例:
first_name = models.CharField(max_length=128, blank=True, null=True)
答案 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')
}),
)