2015-02-16 4 views
1

Я пытаюсь интегрировать this простой форум django в существующий проект.Как фильтровать объекты для панели администратора django?

В admin.py У меня есть

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

Проблема заключается в том, что, так как есть + 100K пользователи, когда я пытаюсь добавить тему из панели администратора, браузер просто зависает или становится настолько медленным, потому что он должен для загрузки всех пользователей +100K в поле creator.

Так что мне интересно, как фильтровать пользователей в форме, чтобы admin.py загружал только суперпользователей в форму?

ответ

1

Вы можете изменить форму по умолчанию для TopicAdmin и установить требуемую QuerySet для 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'] 
+0

Фильтрация 'creator' в __init__ все еще медленно persumably, поскольку запрос по-прежнему работать, но с использованием raw_id_field сделал свою работу очень хорошо. Много thansk – supermario

+1

Я полагаю, что проблема не в sql-запросе, а в рендеринге/загрузке пользователей 100K. – catavaran

+0

Правильно, это трудная задача для браузера. – supermario

Смежные вопросы