【发布时间】:2019-01-24 16:58:50
【问题描述】:
我通过添加一个强制性的Company 字段来扩展我的用户模型,这样每个用户都属于某个公司。 Company 字段是另一个定义公司的模型的外键。
这很好用,除了 ./manage createsuperuser 坏了,因为它不知道添加这个自定义的必填字段。
原来我可以将REQUIRED_FIELDS = ['company'] 添加到我的自定义用户模型中,这将告诉createsuperuser 请求该字段。这更好,但由于公司字段是外键,它要求提供公司的 ID,任何使用createsuperuser 命令的人都必须查找该 ID - 不完全是用户友好的。我希望使用createsuperuser 命令创建的所有管理员都属于同一公司,并且如果该公司不存在,则自动创建该公司。
阅读django的documentation on createsuperuser,它提到了我想做的确切的事情,以及我想做的确切原因:
您可以子类化管理命令并覆盖 get_input_data() 如果您想自定义数据输入和验证。咨询源码 有关现有实现和方法的详细信息的代码 参数。例如,如果您有 ForeignKey,它可能会很有用 在 REQUIRED_FIELDS 中并希望允许创建实例而不是 输入现有实例的主键。
我只是不确定我应该在项目的哪个位置覆盖 get_input_data() 方法。
编辑:
我扩展用户模型的方式是将其添加到我的一个应用程序 (login_app) 的 models.py 中:
class User(AbstractUser):
company = models.ForeignKey(Company, on_delete=models.CASCADE, blank=False, null=False)
并将其添加到 settings.py:
AUTH_USER_MODEL = 'login_app.User'
【问题讨论】:
-
你使用自定义身份验证模型还是 django 默认身份验证模型?
-
不确定。我添加了一些关于如何扩展我的用户模型的更多细节。这是否意味着我正在使用自定义身份验证模型?我仍在使用用户名和密码进行身份验证,如果这就是您的意思。
标签: django python-3.x django-2.1