Могу ли я скомбинировать универсальные представления Create и List на основе классов? - PullRequest
2 голосов
/ 29 сентября 2011

Я ищу самый простой способ функционально объединить List и Create с общими представлениями классов.
Мне нужна страница со списком элементов и формой для добавления нового элемента внизу.

Я думал, что смешанная архитектура позволит объединить необходимые классы , но мне пока не повезло.

Это почти работает:

class ResourceListView(ListView, BaseCreateView):
    context_object_name = 'resources'
    model = Resource
    form_class = ResourceForm

Но form недоступен внутри шаблона и происходит сбой при некорректном выводе (когда форма верна, это нормально).
Это может быть связано с множественным наследованием, но я пока не очень разбираюсь в Python, поэтому это слишком запутанно.

Есть ли простой способ объединить некоторые из mixins в представление просмотра и создания, или мне нужно развернуть свой собственный?

1 Ответ

4 голосов
/ 29 сентября 2011

Примечание: я больше не поддерживаю это решение, так как это гораздо чище.

Методом проб и ошибок (и, глядя на источник в Django), я написал это:

class ListCreateView(ListView, BaseCreateView):
    def get_context_data(self, **kwargs):
        self.object = None
        self.object_list = self.get_queryset()

        form_class = self.get_form_class()
        form = self.get_form(form_class)

        kwargs.update({'object_list': self.object_list, 'form': form})

        context = super(ListCreateView, self).get_context_data(**kwargs)
        return context

Отлично работает как для создания, так и для листинга (хотя, может быть, он вызовет несколько дополнительных вызовов базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...