Получить количество объектов в сериализаторе, где поле внешнего ключа равно x

Предположим

class ABC(models.Models):
    ...
    id = models.SlugField(...)
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    ...

Теперь я хочу что-то вроде

   [{id: adfsdd, no_of_user_objects: 5}, {id: gdfvsdf, no_of_user_objects: 0}, {id: ergthf, no_of_user_objects: 2}]

Как мне этого достичь?

Модель метода для получения количества пользователей, имеющих одинаковый id slug:

class ABC(models.Models):
    ...
    id = models.SlugField(...)
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    ...

    @property # for using in serializer
    def no_of_user_objects(self):
        return ABC.objects.filter(id=self.id).count()

А в вашем сериализаторе есть пользовательский сериализатор для queryset serializer:

class ABDSerializer(serializers.ModelSerializer):
     class Meta:
        model = ABC
        fields = ['id', 'no_of_user_objects']

# in your view
queryset = ABC.objects.distinct('id')
serializer = ABDSerializer(queryset, many=True)
print(serializer.data)
# get you    [{id: adfsdd, no_of_user_objects: 5}, {id: gdfvsdf, #no_of_user_objects: 0}, {id: ergthf, no_of_user_objects: 2}]
Вернуться на верх