Кто-нибудь может помочь с использованием M2M и шаблона правильно? - PullRequest
3 голосов
/ 11 июня 2019

Мне нужно показать название меню и его количество.

Но эта веб-страница не отображается, даже если адрес клиента и его имя работают правильно.

IУ меня есть эти модели (на стороне клиента) в моем проекте 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 голосов
/ 11 июня 2019

Попробуйте:

{% 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.all.Нет отношения, определенного items_set.Поле, которое вы определили в вашей Order модели, равно items, поэтому вам нужно получить к нему доступ.

Подход FOO_set используется для отношений в обратном порядке на такие вещи, как внешние ключи.В этом случае вы следите за отношениями вперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...