假设我有这样的模型
COLORS= (
('R', 'Red'),
('B', 'Yellow'),
('G', 'White'),
)
class Car(models.Model):
name = models.CharField(max_length=20)
color= models.CharField(max_length=1, choices=COLORS)
它在管理面板中显示为一个选择框,但是我希望我的管理员用户可以像多对多关系一样选择这些颜色,如果没有 ('RB', 'Red&Blue'),
类型的逻辑,如何实现这一点
原文由 Hellnar 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个
Car
可以有多个color
吗?在那种情况下color
应该是 多对多关系 而不是CharField
。另一方面,如果您想执行类似 Unix 权限 的操作(即红 + 蓝、红 + 蓝 + 绿等),则为它们中的每一个分配数值,并使color
成为一个 整数字段。更新
(阅读评论后)您可以使用 自定义表单 在管理员中编辑您的模型,而不是默认的
ModelForm
。此自定义表单可以使用多项选择小部件,让用户选择多种颜色。然后,您可以重写表单的clean()
方法以返回适当连接的值(“RB”等)。更新 2
这是一些代码:
首先,从模型字段中删除选项。还将其最大大小增加到 2。我们不想在这里选择 - 如果我们这样做,那么我们将不得不为每种颜色组合添加一个选择。
其次添加自定义
ModelForm
在管理应用程序中使用。此表单将覆盖颜色并将其声明为多项选择字段。我们 确实 需要这里的选择。请注意,我只添加了几个验证。您可能需要更多和/或自定义验证。
最后,向管理员注册此表单。在你的
admin.py
里面: