有没有办法在 Django Rest Framework 中添加自定义字段
Is there a way to add custom fields in Django Rest Framework
我正在为我的 Django 博客项目创建一个 rest API,我有如下模型 Post
和 PostLike
模型:
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
与查询 post 的 post 个对象一起计数 PostLike
个对象。正确的实施方式是什么?
SerializerMethodField 允许您 return 一个基于 class 方法的 return 值的值。
编辑:
请注意,该方法接受对象作为参数。因此要实现你想要的,你可以 return:
def like_count(self, obj):
return obj.postlike_set.count()
我正在为我的 Django 博客项目创建一个 rest API,我有如下模型 Post
和 PostLike
模型:
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
与查询 post 的 post 个对象一起计数 PostLike
个对象。正确的实施方式是什么?
SerializerMethodField 允许您 return 一个基于 class 方法的 return 值的值。
编辑: 请注意,该方法接受对象作为参数。因此要实现你想要的,你可以 return:
def like_count(self, obj):
return obj.postlike_set.count()