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
Использование атрибутов в классах с заглавной буквы считается плохой формой.