我想我的问题可以用一个例子来最好地解释。
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类的字段在模型A的list_display中显示
答案 0 :(得分:0)
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一对一。