Найти - Пользователи
Полная версия: View и ForeignKey
Начало » Django » View и ForeignKey
1
Bidheim
Народ, не ругайтесь, пожалуйста.
Я знаю, что решение более чем очевидно, и лежит где-то на поверхности. Но за 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, но тут как-то не вьезжаю пока…
Буду благодарен за помощь.
truporez
Смотрите метод 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
Bidheim
Спасибо, это видимо, то, что надо. Но последний глупый - наверное, самый глупый… - вопрос. Как это все поместить в шаблон?

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

{% 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

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

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

Объяснение в документации
Bidheim
Черт возьми, как, бывает, не замечаешь очевидных вещей. Гигантское спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB