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' в имени_объекта_контекста. Я такой идиот!!!

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