Django rest framework 使用Django ORM优化序列化程序和查询

Django rest framework 使用Django ORM优化序列化程序和查询,django-rest-framework,Django Rest Framework,我是Django的新手,经常被复杂的查询所困扰。 我有3种型号: class Test(models.Model): test_id = models.CharField(primary_key=True, max_length=40) number_of_questions = models.PositiveSmallIntegerField(null=False, blank=False) def __str__(self) -> str: re

我是Django的新手,经常被复杂的查询所困扰。 我有3种型号:

class Test(models.Model):
    test_id = models.CharField(primary_key=True, max_length=40)
    number_of_questions = models.PositiveSmallIntegerField(null=False, blank=False)
    def __str__(self) -> str:
        return "test "+ str(self.test_id) + " " + str(self.number_of_questions)

    class Meta:
        ordering = ['test_id']

class TakesATest(models.Model):
    user_takes_test = models.ForeignKey(to=CustomUser,on_delete=CASCADE,related_name='user_take_test')
    taken_test = models.ForeignKey(to=Test, on_delete=CASCADE,related_name='taken_test',)
    result = models.DecimalField(max_digits=4,decimal_places=2)

class CustomUser(AbstractUser):
    username = None
    email = models.EmailField(_("Email address"), unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserMangager()
我想获取由经过身份验证的用户完成的集合(StartWith)中的测试列表,以及使用此APIView对该集合进行的数量测试:

class RetrieveTakenTestsView(views.APIView):
    permission_classes = [permissions.IsAuthenticated]

    def get(self, request, *args, **kwargs):
        qq = TakesATest.objects.filter(
            taken_test__test_id__startswith=request.query_params['test_group'],
            user_takes_test=request.user
        )
        serializer = TakenTestsSerializer(qq,many=True)
        data = serializer.data
        res = []
        for value in data:
            res.append(value['taken_test_id'])
        number_of_tests = Test.objects.filter(test_id__startswith="{}".format(request.query_params['test_group'])).count()
        return Response(
            data={
                'taken_tests':res,
                'number_of_tests': number_of_tests
            }
        )

class TakenTestsSerializer(serializers.ModelSerializer):
    taken_test_id = serializers.CharField()
    class Meta:
        model = TakesATest
        fields = ('taken_test_id',)
结果如下:

{
    "taken_tests": [
        "chemistry_10_1",
        "chemistry_10_2"
    ],
    "number_of_tests": 5
}
有没有更优化的解决方案? 如果我想检索这样的结果,我应该怎么做

{
  'data':[
    {
      'test_id':'chemistry_10_1',
      'result': null
    },
    {
      'test_id':'chemistry_10_2',
      'result':'2.75'
    }
  ]
}