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

How to filter objects for django admin panel?

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

在admin.py我有

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

问题是因为有 +100K 用户,当我尝试从管理面板添加主题时,浏览器挂起或变得很慢,因为它需要加载 [=11= 中的所有 +100K 用户] 场地。

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

您可以覆盖 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
    ...

但是 ModelAdminraw_id_fields 属性可能对您来说是更好的选择?

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