使用模型数据在序列化器中提供自定义字段



在Problem模型中,我存储了执行该操作的用户列表。在问题序列化器中,当用户请求他的数据时,我想显示他是否已经完成了某些问题。因此,我在序列化器类中创建了自定义字段,并希望使用模型数据填充它。

这就是我所做的。

from rest_framework import serializers
from dsa.models import Problem
class ProblemSerializer(serializers.ModelSerializer):
isDoneByUser = serializers.BooleanField(default=False)
class Meta:
model = Problem
fields = ['id', 'topic', 'title', 'link', 'isDoneByUser']
def perform_create(self, serializer):
user = self.request.user
userlist = serializer.data.get('isDone')
print(userlist)
if user in userlist:
self.isDoneByUser = True

这是模型

from django.db import models
from django.contrib.auth.models import User
class Problem(models.Model):
topic = models.CharField(max_length=100)
title = models.CharField(max_length=100)
link = models.URLField()
isDone = models.ManyToManyField(User)
class Meta:
ordering = ['topic']

但是这个总是设置isDoneByUser = False(默认值)

请帮忙!

你不能设置isDoneByUser为True,因为它不存在于你的模型中。

你可以用SerializerMethodField:

得到布尔值
class ProblemSerializer(serializers.ModelSerializer):
isDoneByUser = serializers.SerializerMethodField()
def get_isDoneByUser(self, instance):
user = self.context['request'].user
return instance.isDone.filter(pk=user.pk).exists()
class Meta:
model = Problem
fields = ['id', 'topic', 'title', 'link', 'isDoneByUser']

最新更新