Django admin 内联自定义查询集

标签 django

我有两个模型:

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/

相关文章:

python - 无法在 django 中找出正确的 json 查询集

django - 如何在基于类的 View 中过滤多对多查询?

django - 使用Django分页时如何显示正确的对象编号

python - 实现电子书 Paypal 购物的最简单方法

python - 如何使用 DATABASE_URL 将 Docker 容器连接到在本地主机上运行的 PostgreSQL?

Django 注释 Concat - 表达式包含混合类型。您必须设置 output_field

django - Elastic Beanstalk 上的 Django 中的定期任务(可能使用 celerybeat)

python - Django UpdateView 有空表格

python - 如何从 django 管理页面中删除 DELETE 按钮

python - Django inspectdb 'unique_together' 指的是不存在的字段(2015)