在外键关系的两侧显示ModelChoiceField

时间:2011-11-03 01:46:00

标签: django-admin

我有两个模型,它们之间有外键关系。在admin中,具有所描述的外键关系的模型的编辑页面(型号1)显示ModelChoiceField。关系另一侧的页面(型号2)没有显示任何内容,直到我将第一个模型添加到ModelAdmin作为内联。内联使我可以选择从1号模型创建新对象。

我想将ModelChoiceField添加到2号模型的内联中,以便用户可以选择创建新对象还是从预先存在的对象列表中进行选择。

理想情况下,我还可以使用过滤器为Model 1对象填充新的ModelChoiceField。

1 个答案:

答案 0 :(得分:2)

好的,问这个问题,除了我的个人资料的凉爽的风滚草徽章外什么都没有。我最终发现了以下解决方案。这比我想象的要简单,但它让我问另一个问题here,因为一旦实现,从管理页面上的ModelChoiceField中选择并保存不会按预期创建外键关系。

无论如何,关于解决方案:

我的艺术模型包含布尔字段“has_storypak”,以指示它是否与Storypak模型有关系和实例。由于我预期Art实例只与一个Storypak相关,而Storypaks可能有许多相关的艺术品,我写了以下自定义字段,只包含“has_storypak”的值为False的实例。

class RuntimeArtSelectForm(forms.ModelForm):
    storypak_orphan = forms.ModelChoiceField(label="Art",
            queryset=Art.objects.filter(has_storypak=False))
    class Meta:
        model = Art
        fields = ('storypak_orphan',)

接下来,我将此表单添加到Art模型的内嵌表单中......

class ArtInline(admin.TabularInline):
    model = Art
    form = RuntimeArtSelectForm

...并将ArtInline包含在ModelAdmin for Storypak中。这给了我包含我正在寻找的模型对象的过滤列表的下拉列表。但是我仍然遇到上面提到的问题,并且这个问题开放question正在寻找解决方案。