Django管理员在外键上过滤字段

时间:2014-03-26 21:27:33

标签: django django-admin

在我的django项目中,我有几个通过FK相互关联的模型。

School
---
id
name

Account
---
id
user_id
school_id
status

在django管理网站中,我尝试过滤“帐户”页面,仅显示与查看网站的员工用户具有相同学校ID的帐户。

class AccountAdmin(admin.ModelAdmin):
    list_display = ('user', 'status', email, 'get_school', 'created')
    search_fields = ('user__username', )
    list_filter = ('status',)

    def get_school(self, obj):
        return obj.school.name

    get_school.short_description = 'School'

    # Display all if superuser, otherwise only show same school accounts
    def queryset(self, request):
        qs = super(AccountAdmin, self).queryset(request)
        if request.user.is_superuser:
            return qs

        return qs.filter(school_id=2)

正如您所看到的,如果我在那里硬编码school_id,我已设法让它正确过滤。但是,我努力让目前的员工用户上学。我已经把自己搞糊涂了。

2 个答案:

答案 0 :(得分:1)

您需要从用户上下文中获取帐户,然后您可以过滤该帐户:

account = Account.objects.get(user_id=request.user.id)

return qs.filter(school_id=account.school_id)

答案 1 :(得分:1)

请记住,您也需要导入模型。

例如:

from <application_name>.models import <model_name>