No caching present in queryset Attribute.

26 views
Skip to first unread message

Aniket Singla

unread,
Jul 26, 2020, 4:44:39 AM7/26/20
to Django REST framework
Here is my viewset that I am using

class ModuleViewSet(mixins.CreateModelMixin,
                    mixins.RetrieveModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.ListModelMixin,
                    viewsets.GenericViewSet):
    queryset = models.Module.objects.all()
    permission_classes = [ModuleViewPermission]
    serializer_class = serializers.ModuleSerializer

I have turned the django.db logger logging to 'DEBUG' level and in the logs I can see that the queryset is being calculated for each request.
Am I doing something wrong. In documentation it is mentioned, that queryset is cached for subsequent requests. I can see the below log in each request logs

2020-07-26 13:52:45,281 DEBUG utils:110 26e61c0ac9c740d5bc8779428c5e51e1 (0.006) SELECT "courses_module"."id", "courses_module"."course_id", "courses_module"."name", "courses_module"."number" FROM "courses_module"; args=() django.db.backends

Thanks
Aniket

Aniket Singla

unread,
Jul 26, 2020, 7:21:06 AM7/26/20
to Django REST framework
Also I have noticed that in case of applying filters. New db queries are run instead of taking the data from previously executed queryset. I have filtered queryset on courseId for module. But I can see these queries being run in logs. Can anyone help me out?

2020-07-26 16:40:58,823 DEBUG utils:110 70fdb1abeaab451aa0f0783c7e8cf437 (0.005) SELECT "courses_module"."id", "courses_module"."course_id", "courses_module"."name", "courses_module"."number" FROM "courses_module"; args=() django.db.backends
2020-07-26 16:41:27,388 DEBUG utils:110 70fdb1abeaab451aa0f0783c7e8cf437 (0.006) SELECT "courses_course"."id", "courses_course"."name", "courses_course"."description", "courses_course"."price_group_id" FROM "courses_course" WHERE "courses_course"."id" = 1; args=(1,) django.db.backends
2020-07-26 16:41:27,394 DEBUG utils:110 70fdb1abeaab451aa0f0783c7e8cf437 (0.000) SELECT "courses_module"."id", "courses_module"."course_id", "courses_module"."name", "courses_module"."number" FROM "courses_module" WHERE "courses_module"."course_id" = 1; args=(1,) django.db.backends

Aniket Singla

unread,
Jul 26, 2020, 7:34:57 AM7/26/20
to Django REST framework
In case of get by Id , it first gets all modules from db (2 times) , then do a get by Id query.  Wont it raise performance issues?

2020-07-26 16:58:07,472 DEBUG utils:110 d9586c3c14e3438b911598d019f33b2c (0.005) SELECT "courses_module"."id", "courses_module"."course_id", "courses_module"."name", "courses_module"."number" FROM "courses_module"; args=() django.db.backends
2020-07-26 16:58:12,551 DEBUG utils:110 d9586c3c14e3438b911598d019f33b2c (0.001) SELECT "courses_module"."id", "courses_module"."course_id", "courses_module"."name", "courses_module"."number" FROM "courses_module"; args=() django.db.backends
2020-07-26 16:58:16,543 DEBUG utils:110 d9586c3c14e3438b911598d019f33b2c (0.001) SELECT "courses_module"."id", "courses_module"."course_id", "courses_module"."name", "courses_module"."number" FROM "courses_module" WHERE "courses_module"."id" = 1; args=(1,) django.db.backends


On Sunday, 26 July 2020 14:14:39 UTC+5:30, Aniket Singla wrote:
Reply all
Reply to author
Forward
0 new messages