Шаблон Django, перебирать элементы, если их идентификатор равен имени родительского цикла - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь пройтись по разным зонам, а затем показать элементы, которые являются частью этой зоны

Зона - это модель, имя и ForeignKey. Планш - это модель, у которой Zone as ForeignKey.

Я перебираю зоны для отображения каждой зоны. В этом цикле я зацикливаю все Планки и хотел бы отображать только те, которые имеют Зону как ForeignKey.

class Zones(models.Model):
    name = models.CharField(max_length=30)
    genre = models.ForeignKey(ZoneTypes, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Planche(models.Model):
    pzone = models.ForeignKey(Zones, on_delete=models.CASCADE)
    ref = models.CharField(max_length=5, default="1")
    length = models.IntegerField()
    width = models.IntegerField()
    orientation = models.CharField(max_length=30)

    def __str__(self):
        return self.ref

Template

<div>
     <h1><a href="/">My list of planches</a></h1>
</div>
{% for z in zones %}
    <div>
        <h2><a href="/zone/{{ z.name }}">Zone name: {{ z.name }}</a></h2>
        {% for p in planches %}
        {% if p.pzone == z.name }
        <h1><a href="planche/{{ planche.ref }}">Ref: {{ p.ref }}</a></h1>
        <p>Length: {{ p.length }} - Width: {{ p.width }}</p>
        <p>Orientation: {{ p.orientation }}
        {% endif %}
        {% endfor %}
    </div>
{% endfor %}

{% if p.pzone = z.name%} возвращает False, Они оба возвращают одну и ту же строку, если я просто отображаю их {{p.pzone}} и {{z.name}}, но я предполагаю, что они не имеют одинаковый тип данных. Я пытался преобразовать их в строки в выражении {% with%}, но у меня не получается

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Если вы хотите отобразить планки для каждой зоны, вы можете написать второй цикл следующим образом:

<div>
  <h1><a href="/">My list of planches</a></h1>
</div>
{% for z in zones %}
    <div>
        <h2><a href="/zone/{{ z.name }}">Zone name: {{ z.name }}</a></h2>
        {% for p in z.planche_set.all %}
        <h1><a href="planche/{{ planche.ref }}">Ref: {{ p.ref }}</a></h1>
        <p>Length: {{ p.length }} - Width: {{ p.width }}</p>
        <p>Orientation: {{ p.orientation }}
        {% endif %}
        {% endfor %}
    </div>
{% endfor %}

Вот пример из другого поста: Отношение внешнего ключа Django в шаблоне

0 голосов
/ 27 января 2019

Я предполагаю, что вы хотите отобразить все доски для каждой зоны. Вы можете использовать related_name на ForeignKey для доступа к элементам, ссылающимся на текущий объект. Вы не установили там никакого связанного имени, поэтому оно используется по умолчанию: planche_set.

<div>
     <h1><a href="/">My list of planches</a></h1>
</div>
{% for z in zones %}
    <div>
        <h2><a href="/zone/{{ z.name }}">Zone name: {{ z.name }}</a></h2>
        {% for p in z.planche_set.all %}
        <h1><a href="planche/{{ planche.ref }}">Ref: {{ p.ref }}</a></h1>
        <p>Length: {{ p.length }} - Width: {{ p.width }}</p>
        <p>Orientation: {{ p.orientation }}
        {% endfor %}
    </div>
{% endfor %}

Имейте в виду, что метод будет выполнять N + 1 запросов (один для выбора зон, затем один запрос для каждой зоны, чтобы получить планки каждой зоны), если только вы не добавите prefetch_related('planche') в представление, где вы выбираете zones.

Ссылки:

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