【发布时间】:2010-05-23 14:11:18
【问题描述】:
我正在尝试实现 Florian 在他关于 Django Advent 的文章中的 object permissions system,但我遇到了一个问题,试图将返回的查询集限制为仅用户有权编辑/查看的项目。 Florian 在他关于包装管理员的部分中提到了它,但跳过了它。我看不到过滤查询集的好方法。我错过了什么吗?
【问题讨论】:
标签: django django-models django-admin
我正在尝试实现 Florian 在他关于 Django Advent 的文章中的 object permissions system,但我遇到了一个问题,试图将返回的查询集限制为仅用户有权编辑/查看的项目。 Florian 在他关于包装管理员的部分中提到了它,但跳过了它。我看不到过滤查询集的好方法。我错过了什么吗?
【问题讨论】:
标签: django django-models django-admin
当你这样做时:
class ObjectPermission(models.Model):
user = models.ForeignKey(User)
can_view = models.BooleanField()
can_change = models.BooleanField()
can_delete = models.BooleanField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
您可以通过这种方式过滤您的查询集(在您的方法查询集中):
def queryset(self, request):
qs = super(YourModelAdmin, self).queryset(request)
op = ObjectPermission.objects.filter(user=request.user, can_change=True, content_type=ContentType.objects.get_for_model(YourModel)).values_list('object_id').distinct()
qs = queryset.filter(id__in=[id[0] for id in op])
return qs
【讨论】: