Django:如何通过与外键相关的对象获取对象

时间:2019-04-17 08:08:37

标签: django django-models detailview

我正在用Django做一个webapp。此刻,我对DetailViews感到困惑,并显示与外键相关的不同模型的数据。

例如,我有以下型号:
-图书馆
-图书(与图书馆有关)
-页面(与Book有关)

此刻,我有一个Book模型的DetailView。
我设法通过“ _set.all”访问该书。
现在,我还需要访问该书的页面。

Models.py:

class Library(models.Model):
    name = models.CharField(max_length=50)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

class Book(models.Model):
    title = models.IntegerField()
    library = models.ForeignKey(Library, on_delete=models.CASCADE)

class Page(models.Model):
    content= models.CharField(max_length=50000)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)

Views.py

class TableDetailView(User, LoginRequiredMixin, DetailView):
    model = Library
    template_name = 'library/table.html'
    context_object_name = 'library'

table.html

<ul>
    {% for book in library.book_set.all %}
        <li>{{ book.title }}</li>
    {% endfor %}
</ul>
<!-- Works until here -->
<ul>
    {% for page in library.book.page_set.all %}
        <li>{{ page.content }}</li>
    {% endfor %}
</ul>

如何获取视图中显示的页面内容? 感谢您的任何帮助<3

1 个答案:

答案 0 :(得分:0)

library.book是不适当的关系。对于您要实现的用例,

<ul>
    {% for book in library.book_set.all %}
        <li>{{ book.title }}
            <ul>
                {% for page in book.page_set.all %}
                    <li>{{ page.content }}</li>
                {% endfor %}
            </ul>
        </li>
    {% endfor %}
</ul>