Django-跨模型查询3个模型

问题描述 投票:0回答:1

我正在开展一个实践项目,创建 3 个独立的页面,即品牌页面、车型页面和车型变体详细信息页面。

我正在开发一个包含三个车型汽车品牌、车型、车型变体的项目 当用户打开汽车型号页面时,他们应该看到该汽车型号的变体列表

class BrandName(models.Model):
    FullName = models.CharField(max_length= 100)
    Slogan = models.CharField(max_length = 255)
    slug = models.SlugField(unique=True)

    def __str__(self):
        return f"{self.FullName}"

class CarModel(models.Model):
    Brand = models.ForeignKey(BrandName, on_delete = models.CASCADE,null=True, related_name = "brands")
    ModelName = models.CharField(max_length = 200)
    slug = models.SlugField(unique=True)

    def __str__(self):
        return f"{self.ModelName}"

class CarModelVariant(models.Model):
    ModelVariantName = models.CharField(max_length = 100)
    Brandname = models.ForeignKey(BrandName, on_delete = models.CASCADE, null = True, related_name="brands1")
    Model1 = models.ForeignKey(CarModel, on_delete = models.CASCADE, null = True, related_name = "model1")
    Doors = models.IntegerField
    SeatingCapacity = models.IntegerField

    def __str__(self):
        return f"{self.ModelVariantName}"

**在应用程序的views.py中

**

from django.shortcuts import render
from django.http import HttpResponse
from . models import CarModelVariant, CarModel, BrandName
from django.views.generic import ListView, DetailView

class CarModelVariantView(ListView):
    template_name = "carlist.html"
    model = CarModelVariant
    
    def get_queryset(self):
        list_model = super().get_queryset()
        data = list_model.filter(Model1= CarModel_instance)
        return data

在应用程序的 urls.py 中

`来自 django.urls 导入路径 从 。导入视图

urlpatterns = [ 路径(“slug:slug”,views.CarModelVariantView.as_view()) ]`

我在加载 carlist.html 模板时面临空白页面

`{% extends "base.html" %}
{% block title%}
Car Brand Variants List
{% endblock%}
{% block content %}
<ul>
    {% for variant in data %}
    <li>{{ variant }}</li>
    {% endfor %}
</ul>
{% endblock %}`
django django-models django-templates
1个回答
0
投票

您看不到元素列表,因为您没有正确使用 CarModelVariant 模型列表的命名。 默认情况下,存储此列表的变量是 object_list

也就是说,如果你想迭代 CarModelVariant 列表,你应该使用以下构造

{% for variant in object_list %}
    <li>{{ variant }}</li>
{% endfor %}

如果您想将变量用于列表,则必须指定 context_object_name 属性

class CarModelVariantView(ListView):
    context_object_name = 'data'

UPD

在类中使用大写字母的属性被认为是不好的形式。

© www.soinside.com 2019 - 2024. All rights reserved.