亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從 django 中基于類的視圖發送多個模型

如何從 django 中基于類的視圖發送多個模型

喵喵時光機 2023-07-11 14:28:34
我制作了一個書單,可以在 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']?


查看完整回答
反對 回復 2023-07-11
  • 1 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號