2017-09-27 66 views
0

我有两个型号:Django管理内嵌自定义查询集

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] 

但仍在直接显示出来的唯一的孩子是fullfill两个过滤器的那些:与由FK +我的自定义过滤器的父。

可以做到这一点吗?

编辑:

我看到现在是谁在过滤我撰写保持独生子女与父查询集的BaseInlineFormSet,任何想法如何避免这种情况?

django/forms/models.py 

class BaseInlineFormSet(BaseModelFormSet): 
    ... 
    if self.instance.pk is not None: 
     qs = queryset.filter(**{self.fk.name: self.instance}) 
    ... 

回答

1

您必须重写__init__()方法BaseInlineFormSet并更新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>) 

然后初始化表单集属性与ChildInlineFormSet

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

Didn't工作。我需要的是忽略使用FK字段的超类过滤器。 – klautern

+0

我已经更新了我的答案。请检查并让我知道这是否有效? – Satendra

+1

谢谢!它现在有效 – klautern