Python 在Django中强制使用电子邮件字段

Python 在Django中强制使用电子邮件字段,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,,“电子邮件”字段是可选的。我想更改Django提供的这个默认行为 我已经扩展了模型以添加一些自定义字段,但仍然无法覆盖它(由于技术限制)。我在这里看到了一些关于用户模型相关问题的其他问题,他们通常建议将注册表子类化以要求电子邮件字段 但是,您不能从管理端执行此操作。我的应用程序没有注册表单,但必须从管理面板添加用户 到目前为止,我已经在谷歌上搜索了很长一段时间,似乎根本不可能,或者我必须重新创建一个完整的模型来改变这一点,这听起来并不是我的最佳解决方案 有人有更好的方法吗?如果您只是想使电子邮

,“电子邮件”字段是可选的。我想更改Django提供的这个默认行为

我已经扩展了模型以添加一些自定义字段,但仍然无法覆盖它(由于技术限制)。我在这里看到了一些关于用户模型相关问题的其他问题,他们通常建议将注册表子类化以要求电子邮件字段

但是,您不能从管理端执行此操作。我的应用程序没有注册表单,但必须从管理面板添加用户

到目前为止,我已经在谷歌上搜索了很长一段时间,似乎根本不可能,或者我必须重新创建一个完整的模型来改变这一点,这听起来并不是我的最佳解决方案


有人有更好的方法吗?

如果您只是想使电子邮件字段成为必需的,那么最干净的方法是创建一个与原始用户模型完全相同的自定义用户模型,但将电子邮件字段设置为唯一。Django已经有了一个类,可以满足您的需要。您可以像这样修改
用户
模型-

class MyUser(AbstractUser):
    # your extra fields

更改后,Django将在您使用它的任何地方保留所需的电子邮件字段,即使是在“管理”面板中。

您能展示一下您的用户模型现在是什么样子吗?您还可以在
用户
的内置管理中混日子,使其需要电子邮件字段。但如果我是你的话,我会继续努力。如果您将
AbstractBaseUser
子类化,这相对来说比较轻松,而且如果您决定更改其他内容,它将为您提供更大的灵活性。据我所知,抽象类(简而言之)用于将模型作为参考,然后添加一些附加字段。但是现在我有了我可以重写父抽象模型中的字段(在本例中为User)-这使事情变得更容易,所以感谢您指出这一点。我还假设,当您从
AbstractUser
继承时,重写是不可能的,我已经尝试过了,但我无法重写字段。我得到以下错误:
django.core.exceptions.FieldError:类“User”中的本地字段“first\u name”与基类“AbstractUser”中类似名称的字段冲突。
。有人能给我解释一下吗?@Heyl1 AbstractUser类已经有了名字字段。您不能覆盖它。如果希望使first_name字段成为必需字段,那么可以扩展AbstractBaseUser并从头构建usermodel。只需查看AbstractUser的源代码,复制除您要更改的字段之外的所有内容并对其进行更改。好的,我认为在您上面的评论中,您说过您可以扩展
AbstractUser
并覆盖字段(在主题起始者“email”的情况下,在我的情况下,“email”、“firstname”和“lastname”都可以)但我想我误解了。谢谢