【问题标题】:Django 1.5.4 syncdb not creating some fields in PostgreSQL 9.1/PostGIS 2 tablesDjango 1.5.4 syncdb 未在 PostgreSQL 9.1/PostGIS 2 表中创建某些字段
【发布时间】:2014-04-28 00:33:13
【问题描述】:

我有一个这样的 Django 模型:

class Company(models.Model):
    name=models.CharField(max_length=256, default=''),
    user=models.ForeignKey(User),
    logo=models.ImageField(upload_to='logos')

    def __unicode__(self):
        return unicode(self.name)

运行 syncdb 后,我得到了这张 PostgreSQL 表

CREATE TABLE myapp_company (
    id integer NOT NULL,
    logo character varying(100) NOT NULL
);

因此,没有名称字段,也没有用户 ID。其他模型类也会发生同样的事情:缺少字段。而且看起来很随意。例如,这很奇怪。这个型号

class MapLayer(models.Model):
    cartodb_layer = models.ForeignKey('CartoDBLayer'),
    work_map = models.ForeignKey('WorkMap'),
    overlap = models.BooleanField(default=False),
    min_zoom = models.IntegerField(default=4),
    max_zoom = models.IntegerField(default=14),
    opacity = models.FloatField(default=0.6),
    anti_aliasing = models.FloatField(default=0.5)

生成这个 PostgreSQL 表

CREATE TABLE myapp_maplayer (
    id integer NOT NULL,
    anti_aliasing double precision NOT NULL
);

那么,为什么只有 id 和最后一个字段(浮点数),而不是任何其他字段?

尝试通过 South 0.8.2 运行 schemamigration --initial 时遇到同样的问题。但即使是一个简单的同步数据库也失败了,这让我觉得这不是南方的问题。

我的软件版本:

  • Django 1.5.4
  • 南 0.8.2
  • PostgreSQL 9.1 + PostGIS 2

有什么线索吗?

【问题讨论】:

  • 不知道。但是,当您安装 South 时,您的“简单同步数据库”是否存在? (它用它自己的稍微不同的同名命令替换了 syncdb 命令。)了解问题是否发生在直接 Django 和 South 下可能有助于缩小问题范围。
  • 是的,它是安装了 South 的 syncdb。不知道南取代了syncdb。很高兴知道。我将从 INSTALLED_APPS 中删除 South 并重试。谢谢!
  • 南已卸载。默认的 syncdb 仍然返回相同的错误。没有线索。这很奇怪。我更新到 Django 1.6.2。同样的问题。

标签: postgresql django-models django-south django-syncdb


【解决方案1】:

解决了。有史以来最愚蠢的错误。问题是逗号。所以,我需要更换

class Company(models.Model):
    name=models.CharField(max_length=256, default=''),
    user=models.ForeignKey(User),
    logo=models.ImageField(upload_to='logos')

    def __unicode__(self):
        return unicode(self.name)

class Company(models.Model):
    name=models.CharField(max_length=256, default='')
    user=models.ForeignKey(User)
    logo=models.ImageField(upload_to='logos')

    def __unicode__(self):
        return unicode(self.name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多