我是 django 和 django-rest-framework 的新手,我想知道是否可以在 annotate(total_sessions=Count()) where if Count() = 0 then total_sessions="null" 上放置条件 if else?我有一个项目,如果总会话数等于 0,则输出必须为空。
我虽然在 total_sessions 上使用 SerializerMethodField() 来获取计数,但这会导致多个 SQL 查询导致 API 响应缓慢,这就是它不可能的原因。
下面的示例代码用于 serializers.py 和 views.py(这只是一个示例代码,因为我的真实代码有多个查询集)。
serializers.py
class ClassStatisticsSerializer(ModelBaseSerializer):
total_sessions = serializers.IntegerField()
class Meta:
model = Class
fields = (
'id',
'batch',
'type,
'total_sessions'
)
views.py
from django.db.models import Count, Q
class ClassStatisticsList(APIView):
condition = {}
if date:
condition = {'classactivity__date':date}
queryset = Class.objects.all().annotate(
total_sessions=Count(
'classactivity',
filter=Q(**condition),
distinct=True
)
)
catspeake
相关分类