我制作了一个书单,可以在 Booklist 类中上传封面图像。为了获得更多图像,我添加了另一个名为 Bookcover 的类。现在在 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
提交
取消