在Admin中仅显示用户创建的对象的子项

时间:2016-07-28 12:45:47

标签: django django-models django-admin

我的django模型中存在以下关系:

django User - 有很多 - Competition - 有很多 - Category - 有很多 - Competitor

在管理员中,我只想显示由登录的User创建的对象。 我可以为Competition做到这一点 - 没问题: 在admin.py我覆盖模型管理员get_queryset并将其分配给模型:

class CompetitionAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super(CompetitionAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(user_id=request.user.id)

admin.site.register(Competition,CompetitionAdmin)

我如何为Category并因此Competitor做同样的事情?

1 个答案:

答案 0 :(得分:0)

您可以使用双下划线表示法引用外键关系:

Category如果Category有一个ForeignKey字段competition

Category.objects.filter(competition__user=request.user)

Competitor如果Competitor有一个ForeignKey字段category

Competitor.objects.filter(category__competition__user=request.user)