2 回答
TA贡献1834条经验 获得超8个赞
用作serializers.SerializerMethodField_
class PostSerializer(serializers.ModelSerializer):
is_saved = serializers.SerializerMethodField()
def get_is_saved(self, post_instance):
return SavedPost.objects.filter(user=post_instance.user, post=post_instance).exists()
class Meta:
model = Post
fields = ['id', 'user', 'post_type', 'file_path',
'title', 'description', 'created_at', 'updated_at', 'is_saved']
def to_representation(self, instance):
data = super().to_representation(instance)
data['user'] = UserSerializer(
User.objects.get(pk=data['user'])).data
return data
TA贡献1806条经验 获得超8个赞
首先,需要明确的是,我将定义srelated_name的选项- 由您决定是否实现此选项:ForeignKeySavedPost
class SavedPost(models.Model):
user = models.ForeignKey(User, related_name="saved", on_delete=models.CASCADE)
post = models.ForeignKey(Post, related_name="saved", on_delete=models.CASCADE)
...
现在,在您的 中PostSerializer,您可以添加此字段(请记住将其添加到内部类fields中的变量中Meta- 也就是说,如果您正在使用ModelSerializer):
class PostSerializer(serializers.ModelSerializer):
saved = SavedPostSerializer(many=True)
...
要完成它,请定义您的SavedPostSerializer- 上面PostSerializer(如果在同一文件/模块中):
class SavedPostSerializer(serializers.ModelSerializer):
class Meta:
model = SavedPost
fields = "__all__"
这样,您的 json 应该有一个嵌套字段,其中的saved键包含 s 数组SavedPost(如果有任何与Post检索到的 s 相关的内容)。
添加回答
举报