任何人都可以帮助正确使用M2M和模板吗?

时间:2019-06-11 03:01:14

标签: python django

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

但是即使客户的地址和姓名正确,该网页也不会显示。

我在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="가격"
    )

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

尝试一下:

{% 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.all替换为order.items.allitems_set没有定义任何关系。您在Order模型上定义的字段是items,因此您需要访问该字段。

FOO_set方法用于诸如外键之类的关系in reverse。在这种情况下,您正在关注一段关系。