У меня есть модели:
class regularGrade(models.Model):
lesson = models.ForeignKey(Timetable)
studentID = models.ForeignKey(Student)
...
class Timetable(models.Model):
subjectID = models.ForeignKey(Subject)
cohortID = models.ForeignKey(Cohort)
...
class Subject(models.Model):
cohortID = models.ForeignKey(Cohort)
...
class Cohort(models.Model):
...
class Student(models.Model):
cohort = models.ForeignKey(Cohort, on_delete=models.CASCADE)
...
Я пытаюсь охватить всех обычных студентов всех 1-х групп по 1 предмету.
Я использую первый сериализатор, указанный выше, чтобы получить его:
class StudentGradesOneSubjectSerializer(serializers.ModelSerializer):
regularGrades = RegularGradesBySubjectSerializer(many=True)
class Meta:
model = models.Student
fields = ('studentName','pk','cohort','regularGrades',)
def get_regularGrades(self, student):
grades = models.regularGrade.objects.all()
return grades
class RegularGradesBySubjectListSerializer(serializers.ListSerializer):
def to_representation(self, data):
**data = data.filter(lesson.subjectID=self.context["subjectID"])**
return super(RegularGradesBySubjectListSerializer, self).to_representation(data)
class RegularGradesBySubjectSerializer(serializers.ModelSerializer):
class Meta:
model = models.regularGrade
fields = ('mark', 'lesson',)
list_serializer_class = RegularGradesBySubjectListSerializer
Я пытаюсь отфильтровать по следующей строке:
data = data.filter(data.lesson.subjectID=self.context["subjectID"])
Однако это невозможно, поскольку идентификатор предмета урока не связан с обычным классом, это две разные модели.
Можно ли получить все оценки одной когорты ОДНОГО предмета?
Это то, что я получаю без фильтра (data = data):
[
{
"studentName": "Alexander Surname",
"pk": 22,
"cohort": 5,
"regularGrades": [
{
"mark": 3,
"lesson": 9
},
]
},
{
"studentName": "FirstName SecondName",
"pk": 23,
"cohort": 5,
"regularGrades": [
{
"mark": 2,
"lesson": 8
}
]
}
]