我有一个名为“state”的字段的模型:
class Foo(models.Model):
...
state = models.IntegerField(choices = STATES)
...
对于每个状态,可能的选择都是所有状态的特定子集。例如:
if foo.state == STATES.OPEN: #if foo is open, possible states are CLOSED, CANCELED
...
if foo.state == STATES.PENDING: #if foo is pending, possible states are OPEN,CANCELED
...
因此,当foo.state更改为新状态时,它的一组可能的选择也会更改。
如何在管理添加/更改页面上实现此功能?
为模型(例如MyModelAdmin)创建新的管理接口时,有特定的方法可以覆盖字段的默认选择。对于泛型choice field:
但也可以重写ForeignKey和Many to Many关系的选项。
您需要在该模型的ModelAdmin类中use a custom ModelForm。在自定义模型窗体的初始化方法中,可以动态设置该字段的选项:
你会这样使用它:
这似乎是一些javascript的工作。您希望选择框中的项列表根据其他项的值而更改,这些项可能是复选框或单选按钮。只有使用javascript才能动态实现这一点,而不需要用户保存表单并重新加载页面。
通过使用model admin的媒体类documentedhere,您可以在模型的管理页面中加载自定义javascript。
相关问题 更多 >
编程相关推荐