[英]Django data grouping using annotate
我有這兩個型號
class Car(TimeStampedModel):
name = models.CharField(_('Car Name'), max_length=50)
manager = models.ForeignKey(
'cars.Manager',
verbose_name=_('Car Manager'),
related_name='cars',
on_delete=models.CASCADE
)
def __str__(self):
return self.name
class Manager(models.Model):
name = models.CharField(_('Name'), max_length=25)
class Meta:
verbose_name = _('Car Manager')
verbose_name_plural = _('Car Managers')
def __str__(self):
return self.name
我還創建了這個序列化程序
class CarManagerSerializer(serializers.ModelSerializer):
class Meta:
model = Manager
fields = '__all__'
然后在視圖上,我嘗試使用這種方式讓每個經理獲得 number_of_managed_cars
def get(self, request):
cars_managers = Manager.objects.all().annotate(number_of_managed_cars=Count('cars'))
serializer = CarManagerSerializer(cars_managers, many=True)
serializer_data = serializer.data
return Response(serializer_data, status=status.HTTP_200_OK)
然后我嘗試到達終點:
{
{
"id": 1,
"name": "John Doe",
}
}
結果中沒有 number_of_managed_cars 。
我跟着這個: https://docs.djangoproject.com/en/3.1/topics/db/aggregation/仍然無法得到正確的結果。
我錯過了哪里?
您需要在序列化程序 class 中指定number_of_managed_cars
字段
class CarManagerSerializer(serializers.ModelSerializer):
number_of_managed_cars = serializers.IntegerField(read_only=True)
class Meta:
model = Manager
fields = '__all__'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.