我有两个模型:
class Parent:
...
class Child:
parent = models.ForeignKey(Parent)
在 的模型管理员中家长 我想显示 的内联 child 使用自定义查询集,不仅是通过 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]
但是内联中显示的唯一子级仍然是满足两个过滤器的子级:通过 FK + 我的自定义过滤器与父级相关。
是否有可能做到这一点?
编辑:
我现在看到的是 BaseInlineFormSet ,它正在过滤我编写的查询集以只保留与父级相关的子级,知道如何避免这种情况吗?
django/forms/models.py
class BaseInlineFormSet(BaseModelFormSet):
...
if self.instance.pk is not None:
qs = queryset.filter(**{self.fk.name: self.instance})
...
最佳答案
旧答案不再适用于当前的 Django 2.2 或 3,因为 self.queryset 被忽略
当前的解决方案是覆盖 get_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 admin 内联自定义查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46447973/