django - 如何扩展 django 的 createsuperuser 管理命令?
问题描述
我通过添加一个必填字段来扩展我的用户模型Company
,以便每个用户都属于某个公司。该Company
字段是定义公司是什么的另一个模型的外键。
这很好用,除了./manage createsuperuser
坏了,因为它不知道添加这个自定义的必填字段。
事实证明,我可以添加REQUIRED_FIELDS = ['company']
到我的自定义用户模型中,它会告诉你createsuperuser
要求这个字段。这更好,但由于公司字段是外键,它要求提供公司的 ID,任何使用该命令的人都必须查找该 ID createsuperuser
- 不完全是用户友好的。我希望使用该createsuperuser
命令创建的所有管理员都属于同一公司,并且如果该公司不存在,则自动创建该公司。
阅读 django关于 createsuperuser 的文档,它提到了我想做的确切事情,以及我想做的确切原因:
如果您想自定义数据输入和验证,您可以继承管理命令并覆盖 get_input_data()。有关现有实现和方法参数的详细信息,请参阅源代码。例如,如果您在 REQUIRED_FIELDS 中有一个 ForeignKey 并希望允许创建实例而不是输入现有实例的主键,这可能会很有用。
我只是不确定我应该在我的项目中的哪个位置覆盖 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'
解决方案
You need to create a custom command, see Django's related documentation here. Try something like below:
from django.contrib.auth.management.commands import createsuperuser
class Command(createsuperuser.Command):
def get_input_data(self, field, message, default=None):
"""
Override this method if you want to customize data inputs or
validation exceptions.
"""
raw_value = input(message)
if default and raw_value == '':
raw_value = default
try:
val = field.clean(raw_value, None)
except exceptions.ValidationError as e:
# here you FK code
return val
推荐阅读
- css - 在本地使用 Angular 9 材质样式
- javascript - 如何使用谷歌图表绘制 CSV 数据文件?
- c# - SQLite 查询未在 WPF 项目中正确执行
- javascript - 使用上下文和reducer在React中删除数组中的项目
- azure-devops-server-2019 - Azure Devops Server 无法连接到代理后面的服务挂钩
- arrays - 从二进制数组输入确定布尔方程
- sql - 包含产品销售额和数量的表 - 添加计算产品的列
- java - 从 HashMap 获取值并填充 Java 对象
- android - 我无法通过其 ID 或标签找到片段
- unity3d - Hololens 2 上的 LocatableCamera (PhotoCapture)