python - 过滤中间模型并使用它来修改模型的查询集
问题描述
我想我的问题最好用一个例子来解释。
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
解决方案
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 一对一。
推荐阅读
- laravel - Laravel phpunit 测试需要访问 API 服务进行用户验证
- python - 在 Python 列表中大量查找随机索引的最快方法是什么?
- java - spring WebClient 如何从使用 http/1.1 的 spring webflux 服务器接收流数据
- javascript - 什么事件最适合检索会话存储值
- c - 声明但未定义的函数的返回类型和参数中的不完整类型
- matlab - 如何在 MATLAB 中创建和保存大型数据集?
- javascript - 在 Android 的 Kotlin 中解析 Mongooses 日期类型?(2020-12-07T12:24:00.624+00:00 格式类型)
- r - R:警告:如果从 tibble 2.0.0 开始省略 `.name_repair`,`as_tibble.matrix()` 的 `x` 参数必须具有唯一的列名
- django - 用户“djangoadmin”的密码认证失败
- kendo-ui - 剑道对话最大长度