Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ManyToManyField-django rest框架中的类计数_Python_Django_Django Rest Framework - Fatal编程技术网

Python ManyToManyField-django rest框架中的类计数

Python ManyToManyField-django rest框架中的类计数,python,django,django-rest-framework,Python,Django,Django Rest Framework,在models.py中: class Post(models.Model): body = models.TextField(max_length=10000) date = models.DateTimeField(auto_now_add=True, blank=True) user = models.ForeignKey(User, on_delete=models.CASCADE) liked_by = models.ManyToManyField(Use

在models.py中:

class Post(models.Model):
    body = models.TextField(max_length=10000)
    date = models.DateTimeField(auto_now_add=True, blank=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    liked_by = models.ManyToManyField(User, blank=True, related_name='liked_by')

    class Meta:
        ordering = ['-date']
在serializers.py中:

class PostSerializer(serializers.ModelSerializer):
    user = UserSerializers()
    class Meta:
        model = Post
        fields = ('body','date','user')

如何计算单个帖子的喜好?并显示哪个用户喜欢该帖子。

您的“喜欢”字段仅引用用户模型,而不是用户模型,并且您只有喜欢您的帖子但喜欢数量的用户。因此,您可以查询特定的帖子并统计用户数量,但我建议使用单独的类计数字段

  • 您需要在添加“through=”时更改类Post manytomy关系

    liked_by=models.ManyToManyField(用户,通过class='liked_users',blank=True,相关的_name='liked_by')

  • 手动创建类似模型的用户:

  • 类相似用户(models.Model): 默认值=models.IntegerField(默认值=0) post=models.ForeignKey(post,related\u name='likedusers',on\u delete=models.CASCADE) user=models.ForeignKey(用户,相关的\u name='likedusers',在\u delete=models.CASCADE上)

  • 获取对喜欢的访问权限(post.likedusers[0]。喜欢的用户数,…下一个用户)

  • 您可以使用SerializerMethodField获得帖子的总喜欢度

    from rest_framework.fields import SerializerMethodField
    
    class PostSerializer(serializers.ModelSerializer):
        user = UserSerializers()
        total_likes = SerializerMethodField()
    
        class Meta:
            model = Post
            fields = ('body','date','user')
    
        def get_total_likes(self, instance):
            return instance.liked_by.all().count()
    

    如果您正在使用django构建rest应用程序,请尝试避免使用m2m关系,因为DRF实际上不支持它(它引入了许多嵌套对象)sir@SLDem,那么我应该使用什么来代替许多关系呢?我是drftry的新手,创建一个单独的关系表,每个关系成员有2个外键,并从中提取数据
    class PostSerializer(serializers.ModelSerializer):
        user = UserSerializers()
        total_likes = serilaizers.SerializerMethodField()
        liked_by = UserSerializers(many=True)
        class Meta:
            model = Post
            fields = ('body','date','user', 'total_likes', 'liked_by')
    
        def get_total_likes(self, instance):
          return instance.liked_by.count()