我正在尝试在Django 1.8中使用DRF ListField w / ArrayField。
我的模型是这样定义的:
class BaseNamed(BaseAudit):
name = models.CharField(max_length=255, null=True, blank=True)
description = models.TextField(null=True, blank=True)
tags = ArrayField(models.TextField(), default=list)
我的序列化程序定义如下:
class BaseNamedSerializer(BaseSerializer):
tags = serializers.ListField(child=serializers.CharField(), required=False, allow_null=True, label='tags', help_text='Tag your object here')
name = serializers.CharField(required=False, allow_null=True, label='name', allow_blank=True)
caption = serializers.CharField(source='description', required=False, allow_null=True, label='caption', style={'base_template': 'textarea.html'}, allow_blank=True)
当我尝试这样测试时,
name = 'New Object'
description = 'Test Object'
tags = [u'a',u'b',u'c']
d = {
'name': self.name,
'caption': self.description,
'tags': self.tags,
}
response = method(self.url,
data=urllib.urlencode(d),
HTTP_X_CSRFTOKEN=self.csrf_token,
content_type="application/x-www-form-urlencoded")
# if it was successful, verify data:
if status_id in [status.HTTP_201_CREATED, status.HTTP_200_OK]:
if hasattr(self, 'obj'):
rec = models.Layer.objects.get(id=self.obj.id)
else:
rec = self.model.objects.all().order_by('-id',)[0]
self.assertEqual(rec.name, self.name)
self.assertEqual(rec.description, self.description)
self.assertEqual(rec.tags, self.tags)
我收到以下错误:
AssertionError: Lists differ: [u"[u'a', u'b', u'c']"] != [u'a', u'b', u'c']
看起来好像标签被存储为具有单个元素的列表,该元素由原始列表的字符串序列化组成。为什么会这样?
我正在使用Django = 1.8和DRF = 3.3.2。