Django rest framework 使用Django ORM优化序列化程序和查询
我是Django的新手,经常被复杂的查询所困扰。 我有3种型号: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
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'
}
]
}