Как использовать несколько моделей в одном шаблоне в Django?

Я разрабатываю вики-страницу, которая в основном выглядит так:

1. Page
    Page ID
    Page name
    Has many: Categories

2. Category
    Category ID
    H2 title
    Has many: category items
    Belongs to: Page

3. Category item
    Category item ID
    H3 title
    Body text
    Image
    Belongs to: Category

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

class PageView(DetailView):
    model = Page
    template_name = 'page.html'

Вот как выглядит моя часть просмотра для «Просмотра страницы», когда я пытаюсь использовать две модели, происходит сбой. Что я могу сделать, чтобы использовать более одной модели?


person Xeen    schedule 15.10.2013    source источник


Ответы (3)


Вам нужно переопределить get_context_data в представлении на основе класса: #EDIT изменил точку на запятую после себя

    def get_context_data(self, **kwargs):
        context = super(PageView, self).get_context_data(**kwargs)
        context['more_model_objects'] = YourModel.objects.all()
        return context

Это позволит вам добавить столько переменных контекста, сколько вам нужно.

person Brandon    schedule 15.10.2013
comment
Хорошо, спасибо за этот ответ, но теперь он выдает ошибку PageView is missing a queryset. Define PageView.model, PageView.queryset, or override PageView.get_queryset()., не могли бы вы показать мне какое-нибудь руководство или что-то в этом роде, как с этим справиться, потому что google не находит такую ​​​​ошибку .. - person Xeen; 15.10.2013
comment
Хм. Я подозреваю, что вам нужно добавить свойство набора запросов в класс PageView: queryset = Page.objects.all() - person Brandon; 15.10.2013


Подумайте о предоставлении уникальных URL-адресов для каждой ссылки, используемой на странице. Благодаря этому вы можете использовать разные представления с моделями diff.

person user2873552    schedule 15.10.2013