Django-Cross Model Query 3 Models

Я работаю над практическим проектом по созданию 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 приложения

`from django.urls import path from . import views

urlpatterns = [ path("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 %}`

Вы не видите список элементов, потому что неправильно используете именование для списка моделей CarModelVariant. По умолчанию переменной, хранящей этот список, является object_list.

То есть, если вы хотите выполнить итерацию по списку CarModelVariant, вам следует использовать следующую конструкцию

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

если вы хотите использовать свою переменную для списка, вы должны указать атрибут context_object_name

class CarModelVariantView(ListView):
    context_object_name = 'data'

UPD

Использование атрибутов в классах с заглавной буквы считается плохой формой.

Вернуться на верх