在Django管理员中,在多对一关系中,显示一个选择列表以从“一个”中选择“存在多个”

时间:2015-08-07 15:50:22

标签: django

想象一下,我们有一个这样的模型:

class Container(models.Model):
    name = models.CharField(max_length=60)

class Element(models.Model):
    container = models.ForeignKey(Container, blank=True, null=True)

Container是One,Element是众多。

在Django admin中,如果我将StackedInline model=Element添加到inlines模型管理员的Container

class Inline(admin.StackedInline):
    model = Element

class ContainerAdmin(admin.ModelAdmin):
    inlines = (Inline,)

admin.site.register(Container, ContainerAdmin)

我最终获得了一个formset,允许我在添加容器表单中输入 Element个对象。
相反,我希望获得一个选择小部件,以选择现有 Element个对象。

这是否可以在不引入额外模型的情况下实现?

1 个答案:

答案 0 :(得分:3)

我认为你应该能够这样做:

class ContainerAdminForm(forms.ModelForm):
    class Meta:
        model = Container
        fields = ('name',)
    element_set = forms.ModelMultipleChoiceField(queryset=Element.objects.all())

class ContainerAdmin(admin.ModelAdmin):
    form = ContainerAdminForm

# register and whatnot

我不知道我的项目中有这样的东西,但如果我发现了什么,我会告诉你的。您可能还必须覆盖表单上的save()方法,以便实际保存选定的Element;我不知道命名字段element_set(或反向关系的名称)是否足够。