Администратор Django, фильтр объектов для встроенного набора форм - PullRequest
11 голосов
/ 20 января 2010

У меня есть встроенный набор форм, и я хотел бы исключить некоторые объекты модели из списка отображения.

Например, есть модель B, у которой есть внешний ключ к модели A, так что это отношение 1: n (объект имеет много объектов B). Теперь на странице редактирования администратора у меня есть встроенные буквы B. Интересно, можно ли каким-то образом отфильтровать список объектов B до визуализации встроенного набора форм, так что не все связанные с этим объекты B попадают в набор форм.

Ответы [ 2 ]

18 голосов
/ 21 января 2010

Ответ на собственный вопрос может показаться немного странным, но я нашел другое решение;)

Возникла проблема с предоставлением пользовательского набора запросов для набора форм, в случае встроенных наборов форм для этого нет хука. Поэтому я вложил в класс BaseInlineFormSet и переопределил метод get_queryset. Затем я просто предоставляю этот набор форм в InlineModelAdmin, и все готово.

Пример:

class MyFormSet(BaseInlineFormSet):
    def get_queryset(self):
        if not hasattr(self, '_queryset'):
            qs = super(MyFormSet, self).get_queryset().filter(main=False)
            self._queryset = qs
        return self._queryset

и класс администратора:

class MyInline(admin.TabularInline):
    model = m.MyModel
    formset =  MyFormSet
    ...
0 голосов
/ 20 января 2010

Вы можете написать свой собственный менеджер для вашей модели (специально для formset) и использовать его.

http://docs.djangoproject.com/en/dev/topics/db/managers/

...