Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django ListView中正确显示来自两个相关模型的数据_Django_Django Views - Fatal编程技术网

如何在Django ListView中正确显示来自两个相关模型的数据

如何在Django ListView中正确显示来自两个相关模型的数据,django,django-views,Django,Django Views,我有以下两种型号: 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(

我有以下两种型号:

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=.....)
我尝试使用以下listview显示模型中的数据:

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')
请注意,每个Loo
id
)实例可以有多个“woo\u项目””,因此在列表视图中,对于相同的Loo
id
,它将有两个woo/s实例,因此需要单独显示(最好是在两行中)

到目前为止,我尝试为每个Loo
id
创建额外的(相邻)列,并且无论哪个Loo/s有一个Woo的实例,都会按预期的正常方式显示

如何处理这种情况对于存在多个Woo实例的情况,我们可以有一个嵌套行吗?

编辑 我尝试的内容(基于您的代码示例):

{%for wholoos%中的obj}
{{obj.loo_type}}
{obj.woo_set.all%中项目的%
{{item.woo_dt}}
{%endfor%}
{%endfor%}
但是现在我没有从第二款车型中得到任何东西

编辑2 我的原始代码得到了与前面相同的结果。查看下图:


如果您注意到(在上图中),对象#31和34各有一个子对象(子对象)。#32和33各有两个。我希望它们在单独的行中,而不是列中。原因是,如果每个父项都有许多项(我的DB设计要求必须如此),那么我最终会为子对象提供大量的额外列(而且也没有任何列标题)。

您可以在模板中循环Loo的实例,如图所示,不必重写get\u context\u数据

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

我已将代码合并(按照您的建议)。但无法从Woo获取数据。请从视图中删除获取上下文数据,然后尝试检查我的编辑。结果与我的原始代码相同。由于日期字段
woo_dt
被设计为每个子对象具有唯一的值,是否有方法在循环的第二个(嵌套)
内创建
while
循环?因此,对于每个新日期,将创建一个额外的行?或者让模板来处理会不会太多?有没有一种方法可以让我只显示最新的(woo_dt date-wise)?我尝试了
Loo.objects.distinct().order_by('id')
,但结果是一样的,即我仍然得到子对象的所有值。
{% for obj in object_list %}
{{ obj.loo_type }}
{% for item in obj.woo_set.all %}
{{ item.woo_dt }}
{% endfor %}{% endfor %}