如何在某處獲取或存盤 EmployeeSerializer 的資料,以便我可以再次使用它來獲取活動成員的數量,而不是進行新的資料庫呼叫來獲取活動成員的數量?
class ProjectSerailizer(serializers.ModelSerializer):
members = EmployeeSerializer(many=True)#returns all members of a project
active_members_count = serializers.SerializerMethodField()# get count of members which are having status active
class Meta:
model = Project
fields = ('id','name','members','active_members_count')
def get_active_members_count(self,obj):
#How can I omit this extra db call? as i am already having data in members variable from EmployeeSerializer, can i loop over members variable somehow and count the active ones?
count = obj.members.filter(status='Active').count()
return count
uj5u.com熱心網友回復:
您可以在視圖中使用select_related()和過濾設定查詢集annotate()
django.db.models import Count, Q
queryset = Project.objects.select_related('members').annotate(
active_members_count = Count('members', filter=Q(members__status = 'Active'))
)
然后您將獲得active_members_count和其他members欄位ProjectSerailizer而無需額外的資料庫呼叫
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406805.html
標籤:
