如何过滤django管理面板的对象?

时间:2015-02-16 04:34:45

标签: django django-admin

我正在尝试将this简单的django论坛集成到现有项目中。

在admin.py中我有

class TopicAdmin(admin.ModelAdmin):
    list_display = ["title", "forum", "creator", "created"]
    list_filter = ["forum"]
...

问题是,由于有+ 100K用户,当我尝试从管理面板添加主题时,浏览器只会挂起或变得如此慢,因为它需要加载creator字段中的所有+ 100K用户。

所以我想知道如何过滤表单中的用户,以便admin.py只加载表单中的超级用户?

1 个答案:

答案 0 :(得分:1)

您可以覆盖TopicAdmin的默认表单,并为creator字段设置所需的查询集:

class TopicForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(TopicForm, self).__init__(*args, **kwargs)
        self.fields['creator'].queryset = User.objects.filter(is_superuser=True)

class TopicAdmin(admin.ModelAdmin):
    form = TopicForm
    ...

ModelAdmin的{​​{3}}属性可能是更好的选择吗?

class TopicAdmin(admin.ModelAdmin):
    ...
    raw_id_fields = ['creator']