我有两个相关的模型,我需要创建一个从这两个对象中获取的表。
在我的机型中:
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)
结构很奇怪,但现在只向腔室模型添加属性和值已经太迟了。我不得不接受这样一个事实,即它们是两个独立的模型。
在我的表格中,我需要以下结构:
chamber\u name(obj A)-property\u value(obj B)-customer(再次为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>
桌子空了。没有错误,没有日志,服务器工作正常。如果我只做{{objects\u list}}
外部
在for循环中,我在HTML中得到了“zip object at”。所以我知道
某物
有。我似乎没有正确地解包,因为如果我执行{{objects\u list}}}
在…内
对于for循环,再次没有显示任何内容。
有什么想法吗?如果能在这件事上得到任何帮助,我将不胜感激。作为一名大三学生,我到处搜索,看到一些人在类似的情况下覆盖“get\u context\u data”,但我还不知道如何做到这一点,也不知道它是否适用于这种情况。