Получите идентификатор модели правильно

Я получил две модели. Одна модель для построения главного меню, другая - для статей. Каждая статья имеет ForeignKeyчтобы связать его с пунктом главного меню.

Я не могу понять, как я могу показать на странице Article, что связано с menuItem Модель и как использовать menuItem модели alias поле для URL-адреса?

Моя модель menuItem:

    # -*- coding: utf-8 -*-
    from django.db import models

    class MainMenuItem(models.Model):
        class Meta:
            db_table = "menu_item"  
        title = models.CharField(max_length = 50)
        alias = models.CharField(max_length = 50)

        def __unicode__(self):
            return self.title

        def __str__(self):
            return self.title

Моя модель Article:

    class Article(models.Model):
        class Meta:
            db_table = "article"

        menu = models.ForeignKey(MainMenuItem, blank = True, null = True)
        active = models.BooleanField(default = True)
        created = models.DateTimeField(auto_now_add=True)
        updated = models.DateTimeField(auto_now=True)

        def __unicode__(self):
            return unicode(self.menu) or u''

        def __str__(self):
            return self.menu

мой views.py

    def menu_builder(request, alias):
        findId = MainMenuItem.objects.????
        elements = {
            'menuItems': MainMenuItem.objects.all(),
            'article': Article.objects.get(id=??????),
        }
        return render_to_response('myview.html', elements)

мой urls.py:

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^(?P<alias>.+?)/$', 'menuItem.views.menu_builder'),
    ]

1 ответ

Решение

Вы просто фильтруете по псевдониму на MainMenuItem затем получить все статьи, связанные с этим MainMenuItem:

def menu_builder(request, alias):
    main_menu_item = MainMenuItem.objects.get(alias=alias)
    elements = {
            'menuItems': main_menu_item,
            'articles': main_menu_item.article_set.all(),
        }
    return render_to_response('myview.html, elements)

Django doc о поиске связанных объектов, используя_set,

Редактировать:

Я должен был использовать objects.get() ранее, но использовал objects.filter() что неправильно. Разница в том, что вы должны получить ровно один предмет, чтобы вы могли получить связанные с ним статьи. Если вы используете filter, вы в конечном итоге получите набор запросов, но тогда нет смысла проверять связанные объекты на нескольких объектах, следовательно, ошибка 'QuerySet' object has no attribute 'article_set',

Остерегайтесь того, что у вас должно быть alias за MainMenuItem объекты, в противном случае get() выдаст исключение "возвращено несколько объектов".

Другие вопросы по тегам