Django映射到Postgres citext数组返回一个str而不是一个列表

时间:2018-04-03 15:27:28

标签: python django postgresql

我有一个Django模型,其中包含基于citext的别名数组。当我检索记录而不是列表['foobar']时,我得到一个str '{foobar}',显然,尝试添加别名失败。

我曾经有过:

from django.db import models

class zone(models.Model):
    name = models.CharField(max_length=255)
    aliases = ArrayField(
        models.TextField(max_length=255, blank=True),
        size=4,
        null=True,
        blank=True,
    )

这工作正常,但由于我需要使其不区分大小写,我将TextField更改为CITextField:

from django.contrib.postgres.fields import ArrayField, CITextField
from django.db import models

class zone(models.Model):
    name = models.CharField(max_length=255)
    aliases = ArrayField(
        CITextField(max_length=255, blank=True),
        size=4,
        null=True,
        blank=True,
    )

结果:

items = zone.objects.filter(name='foo')
item = items[0]
print(type(item.aliases), item.aliases)
>> <class 'str'> {"foobar"}

为什么这个 citext 不会被解码为数组而不是普通字符串?

1 个答案:

答案 0 :(得分:2)

您需要将public class Test { private static final ExecutorService EXECUTOR = Executors.newSingleThreadExecutor(); private int i = 1; public void f() { i = 2; EXECUTOR.execute(new Runnable() { @Override public void run() { if (i != 2) throw new AssertionError("i != 2"); } }); } } 添加到django.contrib.postgres设置。