我在序列化django-taggit的标签时遇到了麻烦。我遵循了这里的指示,但它已经过时了。
以下是我所做的:
views.py
class TagsSerializer(serializers.WritableField):
def from_native(self, data):
if type(data) is not list:
raise ParseError("expected a list of data")
return data
def to_native(self, obj):
if type(obj) is not list:
return [tag.name for tag in obj.all()]
return obj我发现了一个错误:
“模块”对象没有属性“WritableField”
显然,WritableField是不受欢迎的。
我使用django 1.8,DRF 3.2和django-taggit-0.17。
发布于 2015-09-16 05:01:17
我将使用TaggableManager更新标记,并使用自定义ListField来处理标记的序列化。然后,您可以使用序列化器创建/更新方法来设置标记。
serializers.py
class TagSerializerField(serializers.ListField):
child = serializers.CharField()
def to_representation(self, data):
return list(data.values_list('name', flat=True))
class TagSerializer(serializers.ModelSerializer):
tags = TagSerializerField()
def create(self, validated_data):
tags = validated_data.pop('tags')
instance = super(TagSerializer, self).create(validated_data)
instance.tags.set(*tags)
return instance也可以在视图中使用perform/挂钩。
views.py
class TagView(APIView):
queryset = Tag.objects.all()
serializer_class = TagSerializer
def perform_create(self, serializer):
instance = serializer.save()
if 'tags' in self.request.DATA:
instance.tags.set(*self.request.DATA['tags'])https://stackoverflow.com/questions/32594396
复制相似问题