Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Python Django:在模板中的同一循环中循环2个对象_Python_Django_Django Templates_Django Views - Fatal编程技术网

Python Django:在模板中的同一循环中循环2个对象

Python Django:在模板中的同一循环中循环2个对象,python,django,django-templates,django-views,Python,Django,Django Templates,Django Views,我有两个相关的模型,我需要创建一个从这两个对象中获取数据的表 在我的模型中: class Chamber(models.Model): chamber_name = models.CharField(max_length=100) chamber_type = models.CharField(max_length=50) customer = models.ForeignKey(Customer, on_delete=models.CASCADE) class Cha

我有两个相关的模型,我需要创建一个从这两个对象中获取数据的表

在我的模型中:

class Chamber(models.Model):
    chamber_name = models.CharField(max_length=100)
    chamber_type = models.CharField(max_length=50)
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)

class ChamberProperties(models.Model):
    chamber = models.ForeignKey(Chamber, on_delete=models.CASCADE)
    property_name = models.CharField(max_length=20)
    property_value = models.CharField(max_length=100)
结构很奇怪,但现在只向腔室模型添加属性和值已经太迟了。我不得不接受这样一个事实:它们是两个不同的模型

在我的表格中,我需要以下结构:

商会名称(obj A)-财产价值(obj B)-客户(再次为obj A)

我尝试了压缩列表,但似乎无法将其解压缩:

class ChambersView(generic.DetailView):
    template_name = 'pages/chambers.html'

    def get(self, request):
        user = User.objects.get(username=request.user)
        customer = Customer.objects.get(user=user)    
        chambers_list = list(Chamber.objects.filter(customer=customer))
        chamber_properties = list(ChamberProperties.objects.filter(chamber__in=chambers_list).order_by('id'))
        objects_list = zip(chamber_properties, chambers_list)
        form = ChambersFilterForm(request=request)
        return render(request, self.template_name, {'filter_form':form, 'objects_list': objects_list})
如果我用python解包,它会工作:

for properties, chambers in objects_list:
            print("-----------------------------------------------------------")
            print("Property is: ", properties.property_value, "and the chamber is:", chambers.chamber_name)
            print("-----------------------------------------------------------")
但当我转到我的HTML模板时:

<div class="card-body p-1">
    <table class="table table-hover">
        <tr class="table-active">
            <th>Chamber</th>
            <th>Property Value</th>
            <th>Customer</th>
        </tr>
        {% for properties, chambers in objects_list %}
            <tr>
                <td><a href="{% url 'chamber' chamber.id %}">{{chambers.chamber_name}}</a></td>
                <td><a href="{% url 'chamber' chamber.id %}">{{properties.property_value}}</a></td>
                <td><a href="{% url 'chamber' chamber.id %}">{{chambers.customer}}</a></td>
            </tr>
        {% endfor %}
    </table>
</div>

室
财产价值
顾客
{%用于属性,对象中的分庭\u列表%}
{%endfor%}
桌子空了。没有错误,没有日志,服务器工作正常。如果我只在for循环的{{objects\u list}}外部执行,我会在HTML中得到“zip object at”。所以我知道那里有什么东西。我只是似乎没有正确地解包它,因为如果我在for循环中执行{{objects_list}},同样也不会显示任何内容


有什么想法吗?我将非常感谢在这件事上的任何帮助。作为一名大三学生,我四处搜索过,我看到一些人在类似的情况下重写“get_context_data”,但我不知道如何做,也不知道它是否适用于这种情况。

因此,在Python2.7中,它看起来像是
zip
立即返回元组列表。在Python3(我猜您正在使用)中,
zip
将返回一个
zip

print(zip([1,2,3],[4,5,6]).__class__)
<class 'zip'>

一切看起来都很好…你能试一下你的观点吗?压缩后,您可以这样做:
objects\u list=[(props,chambers)for props,chambers in objects\u list]
没有说这是正确的方法,只是好奇这是否会改变任何东西。@wholevinski这工作得很好。但我不明白那一行代码。你能详细说明一下吗?嗯,我不是100%确定这为什么有效。这行代码是一个列表理解,它将压缩后的列表解压成元组。你关于它显示为“zip object at”的线索让我相信django模板可能不会将其视为一个iterable之类的东西。对列表的理解迫使它在设置上下文之前成为一个列表。我想我找到了它。我将在下面发布一个答案。非常感谢你详细的回答,它帮助了我很多,也帮了我一些挫折感(我已经有很多了!)。是的,Python 3.5.3,Django 11.8。
objects_list = list(zip(chamber_properties, chambers_list))