【问题标题】:Likes, Dislikes & Views using Django Rest Framework使用 Django Rest 框架的喜欢、不喜欢和查看
【发布时间】:2022-01-07 14:32:47
【问题描述】:

我正在开发一个新闻模型,我想在其中使用 Django Rest Framework(ModelViewset) 执行喜欢、不喜欢和无视图功能。我已经为它创建了一个模型

模型.py

class Post(models.Model):
    NEWS_TYPE = (('Images','Images'),('Multi-Images','Multi-Images'),('Image-Text','Image-Text'),
                 ('Audio-Video','Audio-Video'),('Audio-Video-Text','Audio-Video-Text'),('Audio','Audio'),
                 ('Audio-Text','Audio-Text'))
    POST_STATUS = (('Pending','Pending'),('Verified','Verified'),('Un-Verified','Un-Verified'),
              ('Published','Published'),('Mint','Mint'))
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    post_type = models.CharField(max_length=100, verbose_name='Post Type', choices=NEWS_TYPE)
    title = models.TextField(verbose_name='News Title')
    content = models.TextField(verbose_name='News Content')
    hash_tags = models.CharField(max_length=255, verbose_name='Hash Tags')
    source = models.CharField(max_length=255, verbose_name='News Source')
    author = models.ForeignKey(User, related_name='Post', on_delete=models.CASCADE)
    views = models.ManyToManyField(User,related_name='Views', blank=True)
    likes = models.ManyToManyField(User, related_name='Likes', blank=True)
    dislikes = models.ManyToManyField(User, related_name='Dislikes', blank=True)
    status = models.CharField(max_length=20, verbose_name='Status', choices=POST_STATUS)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return (self.post_type)+ '-' +self.title

序列化器.py

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

views.py

class PostAPI(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

我可以喜欢、不喜欢和查看多个用户。但同时同一用户不喜欢我如何避免这些消息。甚至我如何计算观看次数,喜欢和不喜欢的次数。有什么我遗漏的。请帮助这将是一个很大的支持。非常感谢。

【问题讨论】:

  • 当存在一对多关系时需要引入一个新表。
  • 你能不能在example.Plzz的帮助下解释一下

标签: django django-models django-rest-framework django-views


【解决方案1】:

你将需要另一个类似下面的类(我不记得确切的语法,所以请适应):

class Likes(models.Model):
    post_id <- make it a foreign key
    user_id <- this is the use performing likes or dislikes
    like <- Possible values are (-1, 0, 1)

   (post_id, user_id) is a unique constraint

【讨论】:

  • 我通过设置blank=True改变了模型。所以它奏效了。但是如何计算喜欢、不喜欢和观看次数?
  • 您将在post_id 上使用带有过滤器的计数函数,并且like 的总和将是总数。喜欢或者如果你想同时显示喜欢和不喜欢,那么你可以考虑like=-1like=1
  • 我在序列化器中为它写了一个方法。 def get_total_likes(self): return self.likes.users.count()。这是正确的方法吗。或者你能用代码解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 2017-09-06
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多