Как вернуть данные из базы данных в Django? - PullRequest
0 голосов
/ 30 марта 2020

ОБЩАЯ ИНФОРМАЦИЯ
В настоящее время я делаю проект в Django (онлайн-система для студентов и преподавателей), я закончил веб-интерфейс, но столкнулся с проблемой с бэкэндом. Поэтому, когда я пытаюсь экспортировать данные из одной из моделей, она не возвращает ни одного.
КОД
Соответствующая часть models.py:

from django.db import models

class Ustanova(models.Model):
    skola = models.CharField(max_length = 10)   
    programu = models.CharField(max_length = 50) 
    slika = models.CharField(max_length = 1000)
    def __str__(self):
        return self.skola + '-' + self.program_u

class Razred(models.Model):
    ustanova = models.ForeignKey(Ustanova, on_delete = models.CASCADE)
    programr  = models.CharField(max_length = 50)  
    razredr = models.CharField(max_length = 10)  
    is_take = models.BooleanField(default = False)
    def __str__(self):
        return self.razred_r + '-' + self.program_r

Соответствующая часть views, py:

def _class_chooser(request, name):
    ustanova = get_object_or_404(Ustanova, skola = name)
    razred = Razred.objects.filter(razredr__startswith = name).all()
    context ={
        "ustanova" : ustanova,
        "razred": razred,
    }

URL-адрес в формате: path('<str:name>/', views._class_chooser, name ="class_chooser"), Итак www.example.hr/students/XVG/ - это страница для студентов XVG (страница выбора класса).

И скажем, что данные html файл представлен с помощью ul / li:

<ul>
    {% for i in ustanova.razred_set.all %}
        <li><a href ="{% url 'students:class_menu' razred.razredr %}">  {{ razred.razredr}} - {{ razred.programr }}</a></li>
    {% endfor %}
</ul>

ВЫПУСК Теперь мы подходим к вопросу, в файле html, все, что связано с установой класс работает, поэтому {% for i in ustanova.razred_set.all %} показывает правильное количество классов, хранящихся в базе данных, но {{ razred.razredr}} или все, что связано с классом Razred, не работает (без ошибок при запуске сервера или открытии страницы), если я пытаюсь выполнить ручное управление go до www.exapmle.hr/name/class/, я получаю Django Ошибка отладки (404). Я сделал что-то не так с запросом представлений, или что-то еще не так? Заранее спасибо.
PS
Пример: Давайте * скажем, что в каком-то учреждении (AB C) есть 5 классов, выбор классов будет выглядеть так ( без css / js):

ABC
-
-
-
-
-

Таким образом, отображается только точка перед знаком класса и программой.

Ответы [ 2 ]

1 голос
/ 30 марта 2020

В соответствии с вашим кодом razred - это набор запросов, а не экземпляр модели:

razred = Razred.objects.filter(razredr__startswith = name).all()

, поэтому вы не можете обратиться к нему напрямую, как к одной записи:

<li><a href ="{% url 'students:class_menu' razred.razredr %}">  {{ razred.razredr}} - {{ razred.programr }}</a></li>

Вместо этого измените код следующим образом:

{% for razred in ustanova.razred_set.all %}
    <li><a href ="{% url 'students:class_menu' razred.razredr %}">  {{ razred.razredr}} - {{ razred.programr }}</a></li>
{% endfor %}

, а также удалите избыточный запрос razred из представления.

1 голос
/ 30 марта 2020

Ваш итератор i (for i in ...), но вы обращаетесь к razred.

Измените итератор на razred, и у вас все будет хорошо.

<ul>
  {% for razred in ustanova.razred_set.all %}
     <li>
       <a href="{% url 'students:class_menu' razred.razredr %}">
           {{ razred.razredr}} - {{ razred.programr }}
       </a>
    </li>
    {% endfor %}
</ul>
...