Предоставление пользовательского поля в сериализаторе с использованием данных модели
В модели Problem я храню список пользователей, которые ее решили. В сериализаторе 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']