我制作了一個書單,可以在 Booklist 類中上傳封面圖像。為了獲得更多圖像,我添加了另一個名為 Bookcover 的類?,F在在 Views.py 中如何使用 BookListView 發送 Booklist 和 Bookcovermodels.py 文件如下from django.db import modelsfrom django.utils import timezoneclass Booklist(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length = 100) cover = models.ImageField(null=True, blank=True, default='default-book.jpg') description = models.TextField() date_posted = models.DateTimeField(default=timezone.now) price = models.DecimalField(decimal_places=3, max_digits=100) def __str__(self): return self.titleclass Bookcover(models.Model): post = models.ForeignKey(Booklist, default=None, on_delete=models.CASCADE) covers = models.ImageField(upload_to = 'images/') def __str__(self): return self.post.title這是views.py 文件from django.shortcuts import renderfrom django.views.generic import ListViewfrom .models import Booklist, Bookcoverdef home(request): return render(request, template_name='home/index.html')class BookListView(ListView): model = Booklist template_name = 'home/index.html' context_object_name = 'books' ordering = ['-date_posted']
1 回答

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
如果您創建一個ForeignKey
,Django 將自動生成一個反向關系來訪問(在本例中)BookCover
特定的相關 s?Book
。由于您沒有指定related_name=…
參數 [Django-doc],因此該關系的名稱為modelname_set
,因此在本例中為bookcover_set
。
在模板中,您可以通過以下方式訪問書籍的書籍封面:
{% for book in books %}
? ? {{ book.title }}
? ? {% for cover in book.bookcover_set.all %}
? ? ? ? <img src="{{ cover.covers.url }}">
? ? {% endfor %}
{% endfor %}
然而,這將導致N+1問題。您可以使用.prefetch_related(…)
[Django-doc]來避免這種情況:
class BookListView(ListView):
? ? queryset = Booklist.objects.prefetch_related('bookcover_set')
? ? template_name = 'home/index.html'
? ? context_object_name = 'books'
? ? ordering = ['-date_posted']?
添加回答
舉報
0/150
提交
取消