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