首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在DRF中使用django-taggit

如何在DRF中使用django-taggit
EN

Stack Overflow用户
提问于 2015-09-15 19:46:41
回答 1查看 2.4K关注 0票数 1

我在序列化django-taggit的标签时遇到了麻烦。我遵循了这里的指示,但它已经过时了。

以下是我所做的:

views.py

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2015-09-16 05:01:17

我将使用TaggableManager更新标记,并使用自定义ListField来处理标记的序列化。然后,您可以使用序列化器创建/更新方法来设置标记。

serializers.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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'])
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32594396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档