首页 > 解决方案 > 任何人都可以帮助正确使用 M2M 和模板吗?

问题描述

我需要显示菜单的名称和数量。

但是即使客户的地址和他们的名字正确,这个网页也不会显示。

我的 Django 项目中有这些模型(客户端):

class Order(models.Model):
    client = models.ForeignKey(Client, on_delete=models.CASCADE)
    address = models.CharField(
        max_length=100,
    )
    created_at = models.DateTimeField(auto_now_add=True)

    items = models.ManyToManyField(
        Menu,
        through='OrderItem',
        through_fields=('order', 'menu'),
    )

class OrderItem(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
    count = models.PositiveSmallIntegerField()

和下面的模板页面。

  {% for order in order_set %}
  <tr>
    <td>{{ order.client.name }}</td>
    <td>{{ order.address }}</td>
    <td>{% for item in order.items_set.all %}{{ item }}{% endfor %}</td>
    <td>{{ order.item_set.all.count }}</td>
  </tr>
  {% endfor %}
</table>

模型(合作伙伴方)如下所示。

class Menu(models.Model):
    partner = models.ForeignKey(
    Partner,
    on_delete=models.CASCADE,
    )
    image = models.ImageField(
    verbose_name="메뉴 이미지"
    )
    name = models.CharField(
    max_length=50,
    verbose_name="메뉴 이름"
    )
    price = models.PositiveIntegerField(
    verbose_name="가격"
    )

任何人都可以帮忙吗?

标签: pythondjango

解决方案


尝试这个:

{% for order in order_set %}
  <tr>
    <td>{{ order.client.name }}</td>
    <td>{{ order.address }}</td>
    <td>{% for item in order.items.all %}{{ item }}{% endfor %}</td>
    <td>{{ order.items.all.count }}</td>
  </tr>
{% endfor %}

即,替换order.items_set.allorder.items.all. 没有定义的关系items_set。您在Order模型上定义的字段是items,因此您需要访问该字段。

FOO_set方法用于外键等反向关系。在这种情况下,您正在关注一段关系。


推荐阅读