【问题标题】:Is there a way to add custom fields in Django Rest Framework有没有办法在 Django Rest Framework 中添加自定义字段
【发布时间】:2020-11-30 08:03:54
【问题描述】:

我正在为我的 Django 博客项目创建一个 REST API,我有模型 PostPostLike 模型,如下所示:

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    text = models.TextField()
    approved = models.BooleanField(default=False)
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField( default=timezone.now, blank=True, null=True)
    def publish(self):
        self.published_date = timezone.now()
        self.save()
    def __str__(self):
        return self.text[0:100]

class PostLike(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, default=None, on_delete=models.CASCADE)
    created_date = models.DateTimeField(default=timezone.now)

我有一个类似Post 的序列化器

class PostSerializers(ModelSerializer):
    likes_count = serializers.IntegerField(read_only=True)
    class Meta:
        model= Post
        fields = ['id','text','author', 'approved','created_date', 'likes_count' ]

我希望likes_count 被查询帖子的帖子中的PostLike 对象计数。实施它的正确方法是什么?

【问题讨论】:

    标签: python django django-models django-rest-framework django-serializer


    【解决方案1】:

    SerializerMethodField 允许您根据类方法的返回值返回一个值。

    编辑: 请注意,该方法接受对象作为参数。因此,要实现您想要的,您可以返回:

    def like_count(self, obj):
        return obj.postlike_set.count()
    

    【讨论】:

    • 效果很好。但我找到了this 的答案?这也是一种选择吗?
    • 是的,但在视图层处理。它通过在从数据库中获取数据时对查询集进行注释来工作。
    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多