Python CharField在数据库中显示为IntegerField

Python CharField在数据库中显示为IntegerField,python,django,postgresql,Python,Django,Postgresql,我们正在制作一个电影数据库应用程序,并使用Django 1.7和PostgreSQL 下面是我们的models.py文件的外观: class Movies(models.Model): name = models.CharField(max_length=50) lang = models.ForeignKey(Language, null=True) genre = models.ForeignKey(Genre, null=True) cast = Array

我们正在制作一个电影数据库应用程序,并使用Django 1.7和PostgreSQL

下面是我们的models.py文件的外观:

class Movies(models.Model):
    name = models.CharField(max_length=50)
    lang = models.ForeignKey(Language, null=True)
    genre = models.ForeignKey(Genre, null=True)
    cast = ArrayField(models.CharField(max_length=50))
为了适应我们使用的ArrayField

输入输出模式

下面是为cast生成的SQL:

知道为什么即使我们指定了CharField,cast列仍然是整数吗?

根据,您可以创建如下文本数组:

from djorm_pgarray.fields import TextArrayField

class Movies(models.Model):
    # ...
    cast = TextArrayField(dimension=1)
或者,根据第条:


关于文本字段的最大长度varchar和text对于postgres实际上是相同的:不确定是否可以在postgres的数组中定义它。

侧注:cast对于表列来说是一个坏名称。这是一个保留字。示例:将“123”强制转换为integerNoted。但问题是其他的。换成castor也没用,Postgres可以很好地处理varchar50[]场;相应地设置dbtype可能就是全部。但是正如您所指出的,字符串类型在本质上是相同的,因此除非您的应用程序逻辑实际上需要长度约束,否则您最好使用文本。
ALTER TABLE movies_movies ADD COLUMN "cast" integer[];
from djorm_pgarray.fields import TextArrayField

class Movies(models.Model):
    # ...
    cast = TextArrayField(dimension=1)
from djorm_pgarray.fields import ArrayField

class Movies(models.Model):
    # ...
    cast = ArrayField(dbtype="text", dimension=1)