gpt4 book ai didi

django - 使用 Django-taggit 和 django-taggit-serializer 有问题

转载 作者:行者123 更新时间:2023-12-02 20:14:38 24 4
gpt4 key购买 nike

我正在尝试通过 taggit 和 taggit 序列化程序在我的模型中添加标签。我在 Rest 框架中制作 API。我按照说明操作( https://github.com/glemmaPaul/django-taggit-serializer )但这仍然是一个问题:

"tags": [ "Invalid json list. A tag list submitted in string form must be valid json."]

/设置.py

INSTALLED_APPS = [
[...]
'rest_framework',
'taggit',
'taggit_serializer',
]

/models.py

tags = TaggableManager(blank = True) 

/序列化器.py

class JobSerializer(TaggitSerializer,serializers.HyperlinkedModelSerializer):

# tag serializer
tags = TagListSerializerField()

view.py 中发生了变化。

感谢@ykh帮助我解决了这个问题,但是遇到了新的情况,出现了错误:

当你想初始化该值时:

hao,free

结果将是这样的:

 "tags": [
"hao",
"free"
],

但是当我打算更新这个值时:它自动显示rest框架中的Json文件:

enter image description here

如果您将数据放入 API,结果将是:

enter image description here

问题是,每次我尝试修改 REST 框架中包含“标签”的实例时,括号和换行符都会自动添加到“标签”字段中,如图结果所示


更新:看来我已经解决了这个问题,解决方案是重写序列化器中的创建函数:

using django-taggit-serializer. and

    def create(self, validated_data):
tags = validated_data.pop('tags')
instance = super(JobSerializer, self).create(validated_data)
instance.tags.set(*tags)
return instance

最佳答案

尝试:

import six

class NewTagListSerializerField(TagListSerializerField):
def to_internal_value(self, value):
if isinstance(value, six.string_types):
value = value.split(',')

if not isinstance(value, list):
self.fail('not_a_list', input_type=type(value).__name__)

for s in value:
if not isinstance(s, six.string_types):
self.fail('not_a_str')

self.child.run_validation(s)
return value

class JobSerializer(TaggitSerializer,serializers.HyperlinkedModelSerializer):

tags = NewTagListSerializerField()

发布带有“tags1,tags2”的标签

原始源代码是:

def to_internal_value(self, value):
if isinstance(value, six.string_types):
if not value:
value = "[]"
try:
value = json.loads(value)
except ValueError:
self.fail('invalid_json')

if not isinstance(value, list):
self.fail('not_a_list', input_type=type(value).__name__)

for s in value:
if not isinstance(s, six.string_types):
self.fail('not_a_str')

self.child.run_validation(s)

return value

该错误是由 json.loads(value) 未成功引起的,我不知道哪种数据类型除外。

关于django - 使用 Django-taggit 和 django-taggit-serializer 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52695298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com