Получить данные из нескольких результатов ForeignKey Query - PullRequest
0 голосов
/ 17 апреля 2020

У меня настроено следующее models.py:

Student(models.Model):
    id = models.CharField(max_length = 15, primary_key = True, unique = True)
    first_name = models.CharField(max_length = 25)
    last_name = models.CharField(max_length = 25)
    ...

Fine(models.Model):
    name = models.CharField(max_length = 25)
    description = models.CharField(max_length = 100)
    value = models.DecimalField(max_digits = 6, decimal_places = 2)

StudentFines(models.Model):
    student = ForeignKey(Student, on_delete = models.CASCADE)
    fine = ForeignKey(Fine, null = True, on_delete = models.SET_NULL, related_name = 'fines')
    created = models.DateTimeField(auto_now = True)

Я назначил два штрафа конкретному пользователю в моей базе данных, поэтому в моем view.py у меня есть это, чтобы получить штрафы, которые назначены пользователю:

def detail(request, id):
    ...

    fines = StudentFines.objects.filter(student_id = id)
    ...

    context = {
        ...
        'fines': fines,
    }

И когда я вызываю это в моем шаблоне с {% for fine in fines %}A fine.{% endfor %}, я получаю два результата. Теперь я хочу сообщить подробные c подробности штрафов: имя, описание и стоимость. В конце концов я планирую использовать форму для добавления записи прямо со страницы, но это будущие вещи.

Я искал Inte rnet и наткнулся на несколько способов попробовать получить данные ForeignKey, но ничто из того, что я пытаюсь, не сработало. Я потерял счет и выдергиваю свои волосы, и, возможно, я слишком долго работал над этим, чтобы заметить, каково на самом деле решение. Я попробовал следующее:

В моем шаблоне, внутри for l oop: {{ fine.name }}

, что, очевидно, не работает ... Тогда я попытался вложить его Например: {{ fine.fines.name }} пытается сослаться на related_name в модели. Это не сработало, поэтому я вернулся к своему view.py:

fines = Fines.objects.filter(id__in = StudentFines.objects.all()), которое делает то, о чем я не знаю, но не выдает ошибку. Список просто пустой.

fines = Fines.fines.all(), который пытается получить доступ к полю related_name, насколько я понимаю?

... А также целый ряд других вещей. Во многих примерах, которые я вижу в Интернете, используется .get(), который не работает в моем случае, поскольку он возвращает более одного результата. Чего мне не хватает?

1 Ответ

1 голос
/ 17 апреля 2020

Как насчет значений вызовов, которые вам нужны в наборе запросов

fines = StudentFines.objects.filter(student_id = id).values('fine__name', 'fine__description', 'fine__value')

, а затем использовать их в шаблоне?

{% for fine in fines %}
    {{ fine.fine__name }}
    {{ fine.fine__description }}
    {{ fine.fine__value }}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...