Django admin内联表单 - 将外键查询集限制为一组值

时间:2010-12-08 20:08:52

标签: django django-admin django-forms

我有一些相互关联的模型需要在一个管理页面上共存。这是个主意:

剧院制作有演员,演员有指定的角色。剧院制作与给定的书面文本(游戏,改编等)相关,书面文本包含该文本的所有角色的列表。添加制作时,每个演员都需要与其中一个角色相关联。

以下是数据模型的工作原理:

模型:制作,人物,演员,角色,书面文字

关系:生产和人通过CastMember建立M2M关系,后者添加一个“角色”字段 - 一个对象的ForeignKey。角色本身对WrittenText对象有一个ForeignKey。

所以,问题是:在Productions的管理页面中,我有一个TabularInline来添加CastMembers。表中的CastMember条目的“角色”字段应仅限于生产引用的WrittenText中指定的角色。

我通过覆盖模型表单来解决问题:

class CastMemberForm(ModelForm):
    class Meta:
        model = CastMember

    def __init__(self, *args, **kwargs):
        super(CastMemberForm, self).__init__(*args, **kwargs)
        if 'instance' in kwargs:
         self.fields['role'].queryset = Role.objects.filter(source_text=self.instance.production.source_text)

但是,只有从下拉列表中选择一个人,保存,然后选择角色时,这才有效 - 否则您只需获取所有角色的列表。取出“如果'实例'在kwargs中”给了我一个DoesNotExistError。

如果没有像客户端JS这样的东西,这是不是太复杂了,还是有一个我想念的更简单的解决方案?

1 个答案:

答案 0 :(得分:0)

Here是通过javascript / ajax链接选择框的示例。它应该基本上是相同的原则,但你应该调整js不更新一个选择框,但所有这些都在内联管理员...也许这给你一个小灵感!