Django orm left join возвращает данные как mysql
У меня есть две таблицы следующего вида:
class Classroom(models.Model):
name = model.ChartField()
class Student(models.Model):
name = model.ChartField()
classroom = model.ForeignKey(to='Classroom', related_name='students')
здесь есть такие данные:
Классная комната:
| name |
|---|
| Classroom_A |
| Classroom_B |
| Classroom_C |
Студент:
| name | classroom |
|---|---|
| student_1 | Classroom_A |
| student_2 | Classroom_A |
| student_3 | Classroom_B |
Теперь я хочу получить данные с помощью Django orm следующим образом (возвращается 4 строки данных):
| Classroom_name | student_name |
|---|---|
| Classroom_A | student_1 |
| Classroom_A | student_2 |
| Classroom_B | student_3 |
| Classroom_C | null |
Как я могу написать орм? Результат похож на этот (Это не то, что я хочу):
data = []
for classroom in Classroom.objects.all():
students = classroom.students.all()
if students:
for student in students:
classroom.student = student
data.append(classroom)
else:
classroom.student = None
data.append(classroom)
Думаю, что-то подобное даст результаты, аналогичные желаемым
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ['name',]
class ClassroomSerializer(serializers.ModelSerializer):
students = StudentSerializer(many=True)
class Meta:
model = Classroom
fields = [
'name',
'students',
]
Теперь нужно сериализовать классы с помощью ClassroomSerializer, и данные должны выглядеть следующим образом:
[
{
"name":"class_a",
"students":
[
{"name":"student_a"},
{"name":"student_b"},
]
},
other_classes...
]