获取Django Rest框架中ManyToManyField中的对象计数

2024-04-29 13:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户和事件模型

class User(AbstractUser):
    bio = models.CharField(max_length=255, blank=False, default='')

class Event(models.Model):
    name    = models.CharField(max_length=50)
    user    = models.ManyToManyField("User", related_name='event_player')

我想知道在活动中注册的用户数量,我试过了

试试1

class EventSerializer(serializers.ModelSerializer):

    players_count = serializers.IntegerField(
        source='user_set.count', 
        read_only=True
    )

    class Meta:
        model = Event
        fields = ('id', 'name','players_count')

试试2

class EventSerializer(serializers.ModelSerializer):

    players_count = serializers.SerializerMethodField()

    class Meta:
        model = Event
        fields = ('id', 'name','players_count')

    def get_players_count(self, obj):
        return obj.user_set.all().count()

试试3

class EventSerializer(serializers.ModelSerializer):

    def to_representation(self, instance):
        return {'id': instance.pk, 'players_count': instance.user__count}

    class Meta:
        model = Event
        fields = ('id', 'name','players_count')

但是这些都没有意义,我如何得到嵌套的manytoman用户的总数呢。我是DRF新手,请帮我解决这个问题。
谢谢你的帮助


Tags: instancenameeventidfieldsmodelmodelscount
1条回答
网友
1楼 · 发布于 2024-04-29 13:23:30

Try 2应该在没有_set的情况下工作 有关更多信息,请参见Django ManyToMany Docs

class EventSerializer(serializers.ModelSerializer):

    players_count = serializers.SerializerMethodField()

    class Meta:
        model = Event
        fields = ('id', 'name','players_count')

    def get_players_count(self, obj):
        return obj.user.all().count()

相关问题 更多 >