我无法从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
我收到了这个错误:
'模块' object没有属性' WritableField
显然不推荐使用WritableField。
我使用的是django 1.8,DRF 3.2和django-taggit-0.17。
答案 0 :(得分:4)
我会使用TaggableManager更新标签,使用自定义ListField来处理标签的序列化。然后,您可以使用序列化程序创建/更新方法来设置标记。
try:
n = int(input('Please input an integer : '))
except:
print('Problem with input, using ten instead.')
n = 10
if n > 1:
edge = '*' * n
mid = '*%s*' % (' ' * (n-2))
print(edge)
for i in range(n-2): print(mid)
print(edge)
else:
print('Needs to be two or more')
或者您可以在视图中使用perform_create / perform_update挂钩。
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