Django admin,过滤内联formset的对象

Luk*_*ski 11 django django-forms django-admin

我有一个内联formset,我想排除一些模型对象在formset中显示.

例如.模型B具有模型A的外键,因此它是1:n(一个对象有很多B对象)的关系.现在在一个管理编辑页面上,我有了B的内联.我想知道是否有可能以某种方式在呈现内联formset之前过滤B对象列表,因此并非所有与B对象相关的A都会进入formset.

Luk*_*ski 18

回答自己的问题似乎有点奇怪,但我找到了另一个解决方案;)

向表单集提供自定义查询集时出现问题,如果是内联表单集,则没有挂钩.所以我将BaseInlineFormSet子类化并覆盖了get_queryset方法.然后我只是在InlineModelAdmin中提供这个formset并完成了.

例:

class MyFormSet(BaseInlineFormSet):
    def get_queryset(self):
        if not hasattr(self, '_queryset'):
            qs = super(MyFormSet, self).get_queryset().filter(main=False)
            self._queryset = qs
        return self._queryset
Run Code Online (Sandbox Code Playgroud)

和管理员类:

class MyInline(admin.TabularInline):
    model = m.MyModel
    formset =  MyFormSet
    ...
Run Code Online (Sandbox Code Playgroud)