Django DetailView не отображает данные в шаблоне
Здравствуйте, я только начинаю использовать CBV в Django. Мой ListView работает нормально, он может получить id в моделях, кроме DetailView. Он не показывает детальные данные.[https://drive.google.com/file/d/17yeU-LdvV_yLjnBB2A2gYt5ymSeKvPAR/view?usp=sharing][1]
Вот код:
models.py:
class School(models.Model):
name = models.CharField(max_length=125)
principal = models.CharField(max_length=125)
location = models.CharField(max_length=125)
def __str__(self):
return self.name
class Student(models.Model):
name = models.CharField(max_length=70)
age = models.PositiveIntegerField()
school = models.ForeignKey(School,related_name='students',on_delete=models.CASCADE)
def __str__(self):
return self.name
views.py:
class School_List(ListView):
context_object_name = 'schoollist'
model = School
class School_Detail(DetailView):
contex_object_name = 'schooldetail'
model = Student
template_name = 'basicapp/School_detail.html'
detail.html:
{% block content %}
<h1>Site showing School Detail</h1>
<div class="container">
<div class="p-5 text-white bg-dark rounded-3 container">
<p>Name: {{schooldetail.name}}</p>
<p>Principal: {{schooldetail.principal}}</p>
<p>Location: {{schooldetail.location}}</p>
<h2>Student: </h2>
{% for student in schooldetail.students.all %}
<p>{{student.name}} who is {{student.age}} years old</p>
{% endfor %}
</div>
</div>
{% endblock %}
Спасибо
В School_Detail вы используете Student как Model вместо School Model.
Измените Model с Student на School как
class School_Detail(DetailView):
contex_object_name = 'schooldetail'
model = School #<---- change model name here
template_name = 'basicapp/School_detail.html'
это должно быть {{schooldetail.school.name}}, а не {{schooldetaill.name}}, поскольку вы используете модель Student в ваших представлениях деталей, поэтому вы можете получить доступ к модели School через ваши поля внешнего ключа модели Student.
{% block content %}
<h1>Site showing School Detail</h1>
<div class="container">
<div class="p-5 text-white bg-dark rounded-3 container">
<p>Name: {{schooldetail.school.name}}</p>
<p>Principal: {{schooldetail.school.principal}}</p>
<p>Location: {{schooldetail.school.location}}</p>
<h2>Student: </h2>
{% for student in schooldetail.students.all %}
<p>{{student.name}} who is {{student.age}} years old</p>
{% endfor %}
</div>
</div>
{% endblock %}
OK! Я сейчас реально обделался. Все не работает, потому что в:
class School_Detail(DetailView):
contex_object_name = 'schooldetail'
model = School
template_name = 'basicapp/School_detail.html'
У меня просто не хватает буквы 't' в имени_объекта_контекста. Я такой идиот!!!