Как правильно отображать данные из двух связанных моделей в Django ListView - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть две модели, как показано ниже:

class Loo(models.Model):
    loo_type = models.CharField(max_length=3, default="LOO"...)
    loo_from = models.ForeignKey(Harr, on_delete=models.CASCADE, ...)
    loo_fac = models.DecimalField(max_digits=7, decimal_places=.....)

class Woo(models.Model):
    woo_item = models.AutoField(primary_key=True, ...)
    woo_loo = models.ForeignKey(Loo, on_delete=models.CASCADE, ...)
    woo_dt = models.DateField(null=True, ...)
    woo_rate = models.DecimalField(max_digits=7, decimal_places=.....)

Я пытаюсь отобразить данные из моделей с использованием следующего списка:

class WhoLooView(ListView):
    template_name = "who_loo_list.html"
    context_object_name = 'wholoos'
    model = Loo

    def get_context_data(self, **kwargs):
        context = super(WhoLooView, self).get_context_data(**kwargs)
        context.update({
            'woo_item_list': Woo.objects.order_by('-woo_dt'),
        })
        return context

    def get_queryset(self):
        return Loo.objects.order_by('loo_from')

Обратите внимание, что может быть несколько " woo_item " за экземпляр Loo (id), поэтому в представлении списка будут случаи, когда для того же Loo id он будет иметь два экземпляра Woo / s и, следовательно, должны отображаться отдельно (предпочтительно в двух отдельных строках).

То, что я пробовал до сих пор, создает дополнительные (смежные) столбцы для каждого Loo id и в зависимости от того, Loo / s имеют один экземпляр Woo , отображаются обычным образом, как и ожидалось.

Как это сделать позаботься о такой ситуации. Можем ли мы иметь вложенную строку для случаев, когда существует более одного экземпляра Woo?

Редактировать

Что я пробовал (на основе вашего примера кода):

{% for obj in wholoos %} <!-- wholoos : context object name -->
    {{ obj.loo_type }}
    {% for item in obj.woo_set.all %}
        {{ item.woo_dt }}
    {% endfor %}
{% endfor %}

Но теперь я ничего не получаю от второй модели Woo .

Edit 2

Я получаю тот же результат, что и раньше с мой оригинальный код. Проверьте изображение ниже:

enter image description here

Если вы заметили (на изображении выше), объекты # 31 и 34 имеют по одному дочерних объектов (подобъектов). # 32 и 33 имеют по два . Я хочу, чтобы они были в отдельных строках , а не в столбцах. Причина в том, что в случае, если для каждого родительского элемента есть несколько элементов (что необходимо для моей структуры БД), я получу огромное количество дополнительных столбцов для подобъектов (и это тоже без заголовка столбца ).

1 Ответ

0 голосов
/ 21 февраля 2020

вы можете l oop экземплярам Loo, как показано в ваших шаблонах, не нужно переопределять get_context_data.

{% for obj in object_list %}
{{ obj.loo_type }}
{% for item in obj.woo_set.all %}
{{ item.woo_dt }}
{% endfor %}{% endfor %}
...