如何过滤 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
...
但是 ModelAdmin
的 raw_id_fields
属性可能对您来说是更好的选择?
class TopicAdmin(admin.ModelAdmin):
...
raw_id_fields = ['creator']
我正在尝试将 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
...
但是 ModelAdmin
的 raw_id_fields
属性可能对您来说是更好的选择?
class TopicAdmin(admin.ModelAdmin):
...
raw_id_fields = ['creator']