Django管理与自定义查询集内联

Django管理与自定义查询集内联,django,Django,我有两种型号: class Parent: ... class Child: parent = models.ForeignKey(Parent) 在父项的模型管理中我想用自定义查询集显示子项的内联,而不仅仅是通过fk字段与父项相关的查询集 我试过: class ChildInline(admin.TabularInline): model = Child def get_queryset(self, request): return Child.obje

我有两种型号:

class Parent:
   ...

class Child:
   parent = models.ForeignKey(Parent)
父项的模型管理中我想用自定义查询集显示子项的内联,而不仅仅是通过fk字段与父项相关的查询集

我试过:

class ChildInline(admin.TabularInline):
   model = Child
   def get_queryset(self, request):
      return Child.objects.filter(<my custom filter>)

class ParentAdmin(admin.ModelAdmin):
   inlines = [ChildInline]

您必须重写BaseInlineFormSet的
\uuuu init\uuuu()
方法并更新queryset

from django.forms.models import BaseInlineFormSet

class ChildInlineFormSet(BaseInlineFormSet):

    def __init__(self, *args, **kwargs):
        super(ChildInlineFormSet, self).__init__(*args, **kwargs)
        # Now we need to make a queryset to each field of each form inline
        self.queryset = Child.objects.filter(<my custom filter>)

旧的答案对于当前的Django 2.2或3不再有效,因为self.queryset会被忽略

当前的解决方案是覆盖
get\u queryset

from django.forms.models import BaseInlineFormSet

class ChildInlineFormSet(BaseInlineFormSet):

    def get_queryset(self):
        qs = super(ChildInlineFormSet, self).get_queryset()
        return qs.filter(<custom query filters>)

class ChildInline(admin.TabularInline):
    model = Child
    formset = ChildInlineFormSet
    extra = 0
从django.forms.models导入BaseInlineFormSet
类ChildInlineFormSet(BaseInlineFormSet):
def get_queryset(自我):
qs=super(ChildInlineFormSet,self).get_queryset()
返回qs.filter()
类ChildInline(管理列表行):
模特儿
formset=ChildInlineFormSet
额外=0

不起作用。我需要的是忽略使用FK字段的超类过滤器。我已经更新了答案。请检查并让我知道这是否有效?如果我们需要访问请求或用户对象怎么办?它在Django 2.2.5中不起作用。self.queryset被忽略。我总是得到一切data@hipertracker请使用.get_queryset()而不是.querysetHow来引用
?@EugZol中的父对象。关于如何获取父对象,您可以参考以下答案Linh Nguyen:谢谢
class ChildInline(admin.TabularInline):
    model = Child
    formset = ChildInlineFormSet
    extra = 0
from django.forms.models import BaseInlineFormSet

class ChildInlineFormSet(BaseInlineFormSet):

    def get_queryset(self):
        qs = super(ChildInlineFormSet, self).get_queryset()
        return qs.filter(<custom query filters>)

class ChildInline(admin.TabularInline):
    model = Child
    formset = ChildInlineFormSet
    extra = 0