Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 将视图中的信息与HTML页面中的特定记录链接_Python_Django - Fatal编程技术网

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
  • 颜色,主要特征=真
  • 窗口数,主要功能=假
  • 所有者,主要功能=真
CarFeatures(包含特征及其值):

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项功能。困难在于,我想以表格的形式展示这一点,其中所有特性都有固定的列位置。你知道怎样才能做到吗?