Python 将视图中的信息与HTML页面中的特定记录链接
我有三种型号: 车辆(包含车辆记录):Python 将视图中的信息与HTML页面中的特定记录链接,python,django,Python,Django,我有三种型号: 车辆(包含车辆记录): name = models.CharField(max_length=255) name = models.CharField(max_length=255) primary_feature = models.BooleanField() car = models.ForeignKey(Car, on_delete=models.CASCADE) feature = models.ForeignKey(Feature, on_delete=models
name = models.CharField(max_length=255)
name = models.CharField(max_length=255)
primary_feature = models.BooleanField()
car = models.ForeignKey(Car, on_delete=models.CASCADE)
feature = models.ForeignKey(Feature, on_delete=models.CASCADE)
value = models.CharField(max_length=255)
样本记录:
Car | Feature | Value
==========================
Car A | color | green
Car A | owner | Alice
Car B | color | blue
Car C | windows | 6
- A车
- B车
- C车
name = models.CharField(max_length=255)
name = models.CharField(max_length=255)
primary_feature = models.BooleanField()
car = models.ForeignKey(Car, on_delete=models.CASCADE)
feature = models.ForeignKey(Feature, on_delete=models.CASCADE)
value = models.CharField(max_length=255)
样本记录:
Car | Feature | Value
==========================
Car A | color | green
Car A | owner | Alice
Car B | color | blue
Car C | windows | 6
- 颜色,主要特征=真
- 窗口数,主要功能=假
- 所有者,主要功能=真
name = models.CharField(max_length=255)
name = models.CharField(max_length=255)
primary_feature = models.BooleanField()
car = models.ForeignKey(Car, on_delete=models.CASCADE)
feature = models.ForeignKey(Feature, on_delete=models.CASCADE)
value = models.CharField(max_length=255)
样本记录:
Car | Feature | Value
==========================
Car A | color | green
Car A | owner | Alice
Car B | color | blue
Car C | windows | 6
然后在HTML页面上执行以下操作:
<table>
<tr>
<th>Car</th>
{% foreach feature in features %}
<th>{{ feature.name }}</th>
{% endforeach %}
</tr>
{% foreach car in cars %}
<tr>
<td>{{ car.name }}</td>
{% foreach feature in features %}
<td>??? How do I get the right value here??</td>
{% endforeach %}
</tr>
{% endforeach %}
</table>
汽车
{%foreach功能在features%}
{{feature.name}
{%endforeach%}
{%foreach cars in cars%}
{{car.name}
{%foreach功能在features%}
??? 如何在这里获得正确的值??
{%endforeach%}
{%endforeach%}
这就是我得到的:
Car | Color | Owner
=============================
Car A | ??? | ???
Car B | ??? | ???
Car C | ??? | ???
汽车|颜色|车主
=============================
A车???
B车???
C车???
我应该如何处理这个问题 如果您还没有遇到它,您可能会发现在表中显示对象的方法非常有用。比如你可以做什么
CarsList(ListView):
model = Car
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['features'] = Feature.objects.filter(
primary_feature=True
)
return context
然后在你的模板中
<table>
<tr>
<th>Car</th>
{% for feature in features %}
<th>{{ feature.name }}</th>
{% endfor %}
</tr>
{% for car in object_list %}
<tr>
<td>{{ car.name }}</td>
{% for car_feature in car.carfeatures_set.all %}
<td>{{ car_feature.feature }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% for car_feature in car_features %}
{{ car_feature.car.name }}
{% endfor %}
或在模板中
<table>
<tr>
<th>Car</th>
{% for feature in features %}
<th>{{ feature.name }}</th>
{% endfor %}
</tr>
{% for car in object_list %}
<tr>
<td>{{ car.name }}</td>
{% for car_feature in car.carfeatures_set.all %}
<td>{{ car_feature.feature }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% for car_feature in car_features %}
{{ car_feature.car.name }}
{% endfor %}
您可能会发现阅读多对一关系文档也很有益
要显示所有汽车,以及相关的主要功能,您需要查询CarFeatures
表,类似于
def get_context_data(self, **kwargs):
context = super(CarList, self).get_context_data(**kwargs)
cars = list()
for obj in Car.objects.all():
cars.append(
(obj.name,
obj.carfeatures_set.filter(feature__primary_feature=True))
)
context['cars'] = cars
return context
模板中的哪个看起来像
<h1>Cars</h1>
<ul>
{% for car, carfeatures in cars %}
<li>
{{ car }}
<ul>
{% for carfeature in carfeatures %}
<li>{{ carfeature.feature.name }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
汽车
{%用于汽车,汽车中的汽车功能%}
-
{{car}}
{carfeatures%中的carfeature为%1}
- {{carfeature.feature.name}
{%endfor%}
{%endfor%}
谢谢!然而,你写了你问过如何为一个特定的功能获得所有的汽车
,但这不是我想要的。我正在寻找如何获得所有汽车的特殊功能。我希望能看到进一步澄清的例子。所以你想在所有汽车上循环,然后只显示这些汽车的主要特征?是的,正确!但请记住,有些车的主要功能为0,其他车的主要功能为5,等等。因此,我想确保我仍然可以将数据放入表格中,即使每个车的列表不同(例如,在没有记录时将字段留空)。好吧,我不认为您的数据结构会让这变得容易,但是我会更新我的答案。非常感谢你的帮助。但是,在建议的设置中,如果车辆上存在功能,则只有这些功能才会出现在- 中。因此,一辆具有一个功能的汽车将有一个项目;一辆具有5项功能的汽车将有5项功能。困难在于,我想以表格的形式展示这一点,其中所有特性都有固定的列位置。你知道怎样才能做到吗?