簡體   English   中英

Django 數據分組使用注釋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM