dev*_*jim 1 django serialization django-taggit django-rest-framework
我无法从 django-taggit 序列化标签。我遵循了here的说明,但它已经过时了。
这是我所做的:
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
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
'module' 对象没有属性 'WritableField
显然 WritableField 已被弃用。
我正在使用 django 1.8、DRF 3.2 和 django-taggit-0.17。
我将使用 TaggableManager 来更新标签,并使用自定义 ListField 来处理标签的序列化。然后您可以使用序列化程序创建/更新方法来设置标签。
class TagSerializerField(serializers.ListField):
child = serializers.CharField()
def to_representation(self, data):
return 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
Run Code Online (Sandbox Code Playgroud)
或者您可以在视图中使用 perform_create/perform_update 挂钩。
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'])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1931 次 |
最近记录: |