![](/img/trans.png)
[英]How to save tag in django to my model using django-taggit
[英]How to using django-taggit in DRF
我無法從django-taggit序列化標簽。 我遵循了這里的指示,但是已經過時了。
這是我所做的:
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來處理標簽的序列化。 然后,您可以使用序列化程序的創建/更新方法來設置標簽。
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掛鈎。
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.