如何获取查询集,如何为每个对象获取查询集

时间:2020-04-20 13:19:05

标签: python django

例如,我有以下模型:

class Teacher(models.Model):
    .....


class Student(models.Model):
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
    .....

现在,如果我想获取教师的值,可以使用:Teacher.objects.values("id", "name"),但如何将学生的查询集添加到教师的查询集值中?

这是预期的JSON输出:

{
  "id": 1,
  "name": "Alan",
  "students": [
    {
      "id": 1,
      "name": "John",
      "...": "...",
    },
    {
      "id": 2,
      "name": "Sam",
      "...": "...",
    },
    {....},
    {....},
  ]
}

注意:我知道我可以通过让学生使用queryset来做到这一点,但是在这种情况下,我将有很多重复的老师,所以我只希望每个老师和他的学生作为对象数组

2 个答案:

答案 0 :(得分:0)

Sudent对象可从Teacher作为Teacher.objects.student_set访问。参见https://docs.djangoproject.com/en/3.0/topics/db/queries/#following-relationships-backward

如果您将related_name="students"添加到Student.teacher模型中

class Student(models.Model):
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name="students")

然后您可以使用Teacher.objects.students。参见https://docs.djangoproject.com/en/3.0/ref/models/fields/#django.db.models.ForeignKey.related_name

顺便说一句,您确定on_delete=models.CASCADE吗?

答案 1 :(得分:0)

可能不是最佳答案,但是您可以使用Serializer中的ModelSerializerdjango-restframework将模型序列化为json