Я не могу фильтровать поля в модели (Django)
У меня есть модели (убрал все лишнее):
class Contract(models.Model):
contract_number = models.IntegerField(primary_key=True)
student = models.ForeignKey('Student', on_delete=models.CASCADE)
lessons = models.ManyToManyField('Lesson')
class Student(models.Model):
name = models.CharField(max_length=150)
age = models.IntegerField()
class Lesson(models.Model):
lesson_time = models.TimeField(verbose_name='Время урока')
lesson_date = models.DateField(verbose_name="Дата урока")
is_done = models.BooleanField(verbose_name="Проведен")
В моем html я использую специальную ссылку:
<a href="{%url 'stud_detail' id=student.id%}">
что приводит к url в urls.py:
path('student/<int:id>', views.one_student, name='stud_detail')
А вот и мой взгляд (снова удалены все другие модели):
def one_student(request, id):
student = Student.objects.get(id=id)
contracts = Contract.objects.filter(student=id)
lessons = Lesson.objects.filter(id__in=contract)
print(lessons)
content = dict(student=student,
contracts=contracts,
lessons=lessons)
return render(request, 'studbase/student_detail.html', content)
Теперь у меня 10 уроков в контракте, но по результатам фильтрации у меня только один. print(lessons) возвращает только 1 урок вместо 10 уроков.
Что я сделал не так?
Вы фильтруете Lesson
таким образом, что первичный ключ каким-то образом соответствует id
из Contract
, но это не имеет особого смысла.
Вы можете фильтровать с помощью:
lessons = Lesson.objects.filter(contract__in=contracts)