如何从 django 中基于类的视图发送多个模型

我制作了一个书单,可以在 Booklist 类中上传封面图像。为了获得更多图像,我添加了另一个名为 Bookcover 的类。现在在 Views.py 中如何使用 BookListView 发送 Booklist 和 Bookcover


models.py 文件如下


from django.db import models

from django.utils import timezone




class 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.title



class 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 render

from django.views.generic import ListView

from .models import Booklist, Bookcover





def 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'] 


喵喵时光机
浏览 117回答 1
1回答

料青山看我应如是

如果您创建一个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'] 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python