我有一个由电影名称组成的“电影”模型。我想向用户返回一个修改后的值,而不是数据库。
例如。如果数据库中的电影名称为Godfather
,我想将其返回到You must watch Godfather
。
我尝试使用SerializerMethodField
,它可以为我提供正确的输出,但是当我尝试创建或更新新的电影字段时,会出现以下错误。
MultiValueDictKeyError
模型
# models.py
from django.db import models
class Movie(models.Model):
name = models.CharField(max_length=255, blank=False, )
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateField(auto_now=True)
序列化器
# serializers.py
from rest_framework import serializers
from .models import Movie
class MovieSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
def get_name(self, obj):
return getSomeString(obj.name)
class Meta:
model = Movie
fields = ('id', 'name', 'date_created', 'date_modified')
read_only_fields = ('date_created', 'date_modified')
def getSomeString(string):
return "You must wqatch " + string
观看次数
# views.py
from django.shortcuts import get_object_or_404
from rest_framework import generics
from .models import Movie
from .serializers import MovieSerializer
class CreateView(generics.ListCreateAPIView):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
class DetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
def get_object(self):
return get_object_or_404(
self.get_queryset(),
pk=self.kwargs.get('pk')
)