好的,现在我可以限制变更表单中可用的选项,如下所示:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
from login.models import Room
groups = [group.name for group in request.user.groups.all()]
if 'principal' in groups:
schoolname = request.user.principal.school.name
if db_field.name == 'room':
print("match")
kwargs['queryset'] = Room.objects.filter(school__name=schoolname)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
list_display = ('surname','givennames', 'room')
list_filter = ('room',)
也就是说,上面成功地显示了在他或她的学校注册的只使用用户的学生。
我的问题是,用户仍然可以在列表中看到他们没有连接到的学校的房间,而这个列表中的“过滤器”忽略了“formfield”中的“foreignkey”。
因此,这个下拉列表显示了该地区所有学校的数百个教室,而不是将半打教室视为过滤器上的选项。我试图找到一个与之相当简单的答案,但什么也没有呈现出来。我想要的是像formfield_for_foreignkey应用于我的过滤器选项。
我要过滤过滤器的选项!难怪谷歌不帮忙!
这很难说清楚,所以我会重复一遍,希望在我的冗余中有一些清晰。
我正在尝试筛选可供用户筛选的选项,仅筛选用户具有写入权限的选项。我想要一些学校校长可以过滤学生名单的房间;相反,我有很多房间,其中大部分都不适用,因为校长没有读写特权。
在我的经验水平上,我发现那些可能相关的例子对我来说是相当不透明的。
有什么简单的食谱吗?谢谢!