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

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

上下文“Order.Items”未出現在 Django Admin 的 PDF 文件中

上下文“Order.Items”未出現在 Django Admin 的 PDF 文件中

PHP
小唯快跑啊 2023-11-09 16:53:01
你好,我正在嘗試向我的管理員添加一項功能,可以從 PDF 文件下載訂單詳細信息,到目前為止,除了 Order.Model 未完全顯示外,該功能已成功。所以我有 3 個模型:Item、OrderItem和Order。與Order具有多對多關系,OrderItem并且OrderItem與 具有外鍵Item。在模板中,我嘗試在Order.Itemswhich is之間循環items = models.ManyToManyField(OrderItem),但它沒有呈現任何數據。這是 models.pyclass Item(models.Model):    title = models.CharField(max_length=100)    price = models.FloatField()class OrderItem(models.Model):    user = models.ForeignKey(settings.AUTH_USER_MODEL,                             on_delete=models.CASCADE)    ordered = models.BooleanField(default=False)    item = models.ForeignKey(Item, on_delete=models.CASCADE)    quantity = models.IntegerField(default=1)    variation = models.ManyToManyField(Variation)class Order(models.Model):    items = models.ManyToManyField(OrderItem)這是views.py@staff_member_requireddef admin_order_pdf(request, order_id):    order = get_object_or_404(Order, id=order_id)    html = render_to_string('pdf.html', {'order': order})    response = HttpResponse(content_type='application/pdf')    response['Content-Disposition'] = 'filename="order_{}.pdf"'.format(Order.id)    weasyprint.HTML(string=html).write_pdf(response)    return response這是 url.py    path('admin/order/(<order_id>\d+)/pdf/', views.admin_order_pdf, name='admin_order_pdf')這是 pdf.html 模板,僅顯示為突出顯示                    Ordered on: {{order.ordered_date}}  <----------Showing                                        {% for order_item in order.items.all %}                    {{ order_item.item.title }}         <----------Not Showing                    {% endfor %}我什至嘗試刪除 forloop 但仍然沒有發生                    Ordered on: {{order.ordered_date}}  <----------Showing                                        {{ order_item.item.title }}         <----------Not Showing
查看完整描述

3 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

您正在將 Manytomany 字段與 一起使用OrderItem。因此,為了達到OrderItem,您將必須通過through在后臺創建的模型。您through在編寫時訪問的是模式order.items.all()而不是OrderItem模型。

Order假設您的意圖是在和模型之間創建多對多關系Item。那么您應該如何創建您的ManyToMany

class Item(models.Model):

? ? title = models.CharField(max_length=100)

? ? price = models.FloatField()


class OrderItem(models.Model):

? ? user = models.ForeignKey(settings.AUTH_USER_MODEL,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? on_delete=models.CASCADE)

? ? ordered = models.BooleanField(default=False)

? ? item = models.ForeignKey(Item, on_delete=models.CASCADE)

? ? quantity = models.IntegerField(default=1)

? ? variation = models.ManyToManyField(Variation)


class Order(models.Model):

? ? items = models.ManyToManyField(Item, through='OrderItem')

這將解決您的問題。


查看完整回答
反對 回復 2023-11-09
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

我想我沒有足夠的信息來回答,但從我在這里看到的,您只是從視圖(單個訂單)傳遞一個訂單,而不是查詢集或任何其他可迭代到模板。我錯過了查詢集或可迭代嗎?

如果您想訪問與訂單相關的其他對象(例如 OrderItem),則您在模板中缺少它。從您的模型中我可以看到 Order 與 OrderItem 有關系,而不是 Items。項目是您嘗試在視圖中訪問的項目。(你有 Items 模型嗎?)

刪除循環不起作用,因為模板中沒有可用的 order_item 變量。


查看完整回答
反對 回復 2023-11-09
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

{{order.ordered_date}}這是無效的。根據您在此處顯示的內容,您的Order模型沒有任何字段或方法。ordered_date


Ordered on: {{order.ordered_date}}  # This is wrong and invalid

                    

{% for order_item in order.items.all %}

    {{ order_item.item.title }} # This is valid, use this method to render other fields

{% endfor %}

當你轉換上面的html代碼時,它會生成這樣的pdf。item_1這是項目的標題。{{order.ordered_date}}沒有工作而是{{ order_item.item.title }}工作并且它被渲染在pdf中。

https://img1.sycdn.imooc.com/654c9e220001767603460188.jpg

您共享的第二個片段無效,不會顯示任何動態數據。它只會渲染Ordered on:

Ordered on: {{order.ordered_date}}  <----------Invalid
                
{{ order_item.item.title }}         <----------Invalid

我希望這能解決您的疑問。


查看完整回答
反對 回復 2023-11-09
  • 3 回答
  • 0 關注
  • 207 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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