Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2012 23:32:07

Bidheim
Зарегистрирован: 2012-04-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

View и ForeignKey

Народ, не ругайтесь, пожалуйста.
Я знаю, что решение более чем очевидно, и лежит где-то на поверхности. Но за Django я взялся совсем недавно, поэтому, похоже, что-то упускаю…

Словом, есть модель с примерно след. хар-ками:

class Publisher(models.Model):
	name = models.CharField(max_length = 256)
class Book(models.Model):
	title = models.CharField(max_length = 256)
	pub_date = models.DateField()
	publisher = models.ForeignKey(Publisher)

Модель, понятное дело, вполне условная. Я хочу вывести во view список, скажем, всех издателей и всех изданных ими книг.

Насколько я понял, издателей можно вывести во view где-то так:

class Index(ListView):
    model = Publisher
    template_name = 'books/index.html'
    paginate_by = 5
    
    def get_queryset(self):
        day_list = Publisher.objects.all().order_by('name')
        return day_list

В urls'ах, соответственно пишу нечто вроде:

urlpatterns = patterns('daily.views',
    url(r'^$', Index.as_view()),                  
    )

Вопрос: как добавить сюда вывод из модели Book?… Документацию я читал, но толи взгляд замылился, толи просто туплю… Подскажите, если несложно, а то мозг уже закипает - я знаю, как сделать выборку на чистом SQL, но тут как-то не вьезжаю пока…
Буду благодарен за помощь.

Отредактировано Bidheim (Апрель 25, 2012 23:34:19)

Офлайн

#2 Апрель 25, 2012 23:39:44

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

View и ForeignKey

Смотрите метод get_context_data класса ListView:

    def get_context_data(self, **kwargs):
        context = super(Index, self).get_context_data(**kwargs)
        context["books"] = Book.objects.all().order_by('title')
        return context



Отредактировано truporez (Апрель 25, 2012 23:42:44)

Офлайн

#3 Апрель 26, 2012 00:32:05

Bidheim
Зарегистрирован: 2012-04-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

View и ForeignKey

Спасибо, это видимо, то, что надо. Но последний глупый - наверное, самый глупый… - вопрос. Как это все поместить в шаблон?

Дело в том, что когда я пишу

{% for p in publisher %}
{{p.name}}
{% for book in books %}
{{book.title}}
{%endfor %}
{%endfor %}

То получаю:

Издатель: Имя
Книга: A, B, C, D
Издатель:  Другое Имя
Книга: A, B, C, D

А хотелось бы, естественно (иначе в чем смысл?) получать:

Издатель: Имя
Книга: A, B, 
Издатель:  Другое Имя
Книга: C, D

Т.е. книги, привязанные к конкретному издателю.

Офлайн

#4 Апрель 26, 2012 09:04:32

Chern
От: Киев
Зарегистрирован: 2010-09-15
Сообщения: 71
Репутация: +  3  -
Профиль   Отправить e-mail  

View и ForeignKey

Первого варианта, описаного Вами, было вполне достаточно для этой задачи.

{% for p in publisher %}
    {{p.name}}
    {% for book in p.book_set.all %}
        {{book.title}}
    {%endfor %}
{%endfor %}

Объяснение в документации



Отредактировано Chern (Апрель 26, 2012 09:04:55)

Офлайн

#5 Апрель 26, 2012 09:17:08

Bidheim
Зарегистрирован: 2012-04-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

View и ForeignKey

Черт возьми, как, бывает, не замечаешь очевидных вещей. Гигантское спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version