我试图通过覆盖来限制结果
def queryset(self, request):
在ItemAdmin中。
我想只显示request.user通过用户配置文件被授予类别访问权限的项目。
class Profile(models.Model):
user = models.ForeignKey(auth.User, unique=True)
categoryAccess = models.ManyToManyField(Category ...)
class Item(models.Model):
category = models.ForeignKey(Category ...)
我无法正确理解语法....我正在尝试像
这样的事情class ItemAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(ItemAdmin, self).queryset(request)
return qs.filter( category__in=request.user.objects__profile__categoryAccess )
有什么想法吗?非常感谢!
答案 0 :(得分:2)
过滤器中的双下划线语法仅用于表达式的左侧(这是一个黑客,它实际上是一个函数的关键字参数,而那些不能是表达式)。右侧使用常规语法遍历对象:.
所以你可能想要这个:
return qs.filter(category__in=request.user.profile.categoryAccess.all())
请注意,为了完成这项工作,您应该将user
ForeignKey转换为OneToOneField
(您不需要迁移数据库,只需更改模型定义)。