Listfield w / 1.8 ArrayField

时间:2016-02-01 18:47:45

标签: django postgresql django-rest-framework

我正在尝试在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。

0 个答案:

没有答案