每当我向django应用程序发出POST请求时,它都会抛出一个错误
'Genre' instance expected, got (<Genre: Adventure>, False)我无法理解为什么这是序列化程序的happening.Please帮助。我的电影对象正在被保存,但是体裁对象并不是因为这个错误。
模型
class Movie(models.Model):
popularity = models.FloatField()
director = models.CharField(max_length=255)
imdb_score = models.FloatField()
name = models.CharField(max_length=255,)
def __unicode__(self):
return u'%s' % (self.name)
class Genre(models.Model):
name = models.ForeignKey(Movie,related_name='genres',blank=True, null=True)
genre = models.CharField(max_length=255)
def __unicode__(self):
return u'%s' % (self.genre)串行化器
class CreatableSlugRelatedField(serializers.SlugRelatedField):
def to_internal_value(self, data):
try:
return self.get_queryset().get_or_create(**{self.slug_field: data})
except ObjectDoesNotExist:
self.fail('does_not_exist', slug_name=self.slug_field, value=smart_text(data))
except (TypeError, ValueError):
self.fail('invalid')
class MovieSerializer5(serializers.ModelSerializer):
genres = CreatableSlugRelatedField(many=True,slug_field='genre',queryset=Genre.objects.all())
class Meta:
model = Movie
fields = ('popularity', 'director','imdb_score', 'name', 'genres')视图
class MovieList(APIView):
def post(self, request, format=None):
if not request.user.is_superuser:
return Response("User is not permitted this action")
serializer = MovieSerializer5(data=request.data)
print serializer.initial_data
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)发布于 2015-08-13 01:27:15
当您使用帮助器get_or_create时,它返回一个带有对象的元组(创建与否),以及一个布尔值,该布尔值指示对象是创建的还是已经在db上,请注意;)
发布于 2015-08-13 01:56:56
get_or_create返回(object,created)的元组,因此在序列化程序的to_internal_value中,您需要如下所示:
return self.get_queryset().get_or_create(**{self.slug_field: data})[0]若要访问创建或检索的对象,请执行以下操作。
发布于 2015-08-13 02:46:34
您只需要返回创建的对象.
get_or_create实际上返回(object, created)的元组,其中object是检索或创建的对象,created是指定是否创建新对象的布尔值。
你可以这样做:
obj, created = self.get_queryset().get_or_create(**{self.slug_field: data})
return obj # return the created objecthttps://stackoverflow.com/questions/31977981
复制相似问题