簡體   English   中英

如何在DRF中使用django-taggit

[英]How to using django-taggit in DRF

我無法從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。

我將使用TaggableManager更新標簽,並使用自定義ListField來處理標簽的序列化。 然后,您可以使用序列化程序的創建/更新方法來設置標簽。

serializers.py

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

或者,您可以在視圖中使用perform_create / perform_update掛鈎。

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'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM