首页 > 解决方案 > 过滤中间模型并使用它来修改模型的查询集

问题描述

我想我的问题最好用一个例子来解释。

class A:  # the model where I am making a ModelAdmin
    # 1-to-1 relationship with class B

class B:
    # some fields

class C:
    # many to many with class B
    # field - foreignKey from class D

class D:
    # 1 to 1 relationship with class User

class User:

在 A 类的 modelAdmin 中,我定义了 get_queryset:

def get_queryset(self, request):
    qs = super().get_queryset(request)
    if request.user.is_superuser:
        return qs
    ??return qs.filter(class_C_field=request.user.class_D.pk)

在哪里??意味着我想要做的是从 B 和 C 生成的中间表中获取所有记录,并且只获取 C 类中的字段等于 D 类中的实例之一的那些记录。之后,我想使用的字段类 C 和类 B 显示在我的 list_display 模型类 A

标签: pythondjangodjango-querysetadmin

解决方案


    def get_queryset(self, request):
    qs = super().get_queryset(request)
    if request.user.is_superuser:
        return qs
    qs = A.objects.filter(Afield__C__Cfield=request.user.D.pk)
    return qs

原来我可以从 A 类查询它。因此,如果用户不是管理员,则 qs 在 D 的外键下返回 A 中属于 C 的所有记录的列表。不需要 B,因为 A 有与 B 一对一。


推荐阅读