У меня настроено следующее 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()
, который не работает в моем случае, поскольку он возвращает более одного результата. Чего мне не хватает?