环境: Django 1.8.11 + Postgis
我在MyModel上添加了一些ForeignKeys。所指向的模型在另一个模式(“制图”)中。
makemigrations无错误
migrate一个错误。无法创建约束,因为生成的名称。但我添加了10个字段,它们之间非常相似。只有一个人会给出这个愚蠢的错误。我不能在任何地方指定约束名称。
class myModel(models.Model)
zps_calculated = models.ForeignKey( Cartography_zps, verbose_name="zps_calcolato", null=True, blank=True, on_delete=models.SET_NULL)
zsc_sic_sir_calculated = models.ForeignKey( Cartography_zsc_sic_sir, verbose_name="zsc_sic_sir_calcolato", null=True, blank=True, on_delete=models.SET_NULL)
manyothersdata = "xxx"这是sqlmigrate生成的代码片段(用于检查迁移生成的代码)。正如您所看到的,约束的名称是错误的。10个字段中的1个字段出现错误
CREATE INDEX "segnalazioni_f38ba181" ON "segnalazioni" ("zps_calculated_id");
ALTER TABLE "segnalazioni" ADD CONSTRAINT "se_zps_calculated_id_6844dce0603174b2_fk_"cartography"."zps"_id" FOREIGN KEY ("zps_calculated_id") REFERENCES "cartography"."zps" ("id") DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "segnalazioni_eb52e53f" ON "segnalazioni" ("zsc_sic_sir_calculated_id");
ALTER TABLE "segnalazioni" ADD CONSTRAINT "cc6ce48808e3a5292779a9787d21e5ad" FOREIGN KEY ("zsc_sic_sir_calculated_id") REFERENCES "cartography"."zsc_sic_sir" ("id") DEFERRABLE INITIALLY DEFERRED;这是给出错误的名称:"se_zps_calculated_id_6844dce0603174b2_fk_"cartography"."zps"_id“我认为应该是这样的:"6844dce0603174b2...”
没有给出错误的模型:
class Cartography_zsc_sic_sir(models.Model):
id = models.AutoField(primary_key=True)
slug = models.CharField(max_length=40, blank=True, null=True)
nome = models.CharField(max_length=60, blank=True, null=True)
the_geom = models.MultiPolygonField(srid=23032, blank=True, null=True )
objects = models.GeoManager()
class Meta:
managed = False
db_table = '"cartography"."zsc_sic_sir"'
verbose_name = 'Cartography - zsc_sic_sir'
verbose_name_plural = 'Cartography - zsc_sic_sir'
ordering = ["id","slug"]
def __unicode__(self):
return self.nome这就是给出错误的模型:
class Cartography_zps(models.Model):
id = models.AutoField(primary_key=True)
slug = models.CharField(max_length=40, blank=True, null=True)
the_geom = models.MultiPolygonField(srid=23032, blank=True, null=True )
objects = models.GeoManager()
class Meta:
managed = False
db_table = '"cartography"."zps"'
verbose_name = 'Cartography - ZPS'
verbose_name_plural = 'Cartography - ZPS'
ordering = ["id","slug"]
def __unicode__(self):
return self.slug更进一步,我将使用Django代码向后研究。
这个
' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)%s;' %位于/django/db/backends/base/creation.py行180
使用它
qn = self.connection.ops.quote_name这应该是%s约束名称的值:
qn(truncate_name(r_name, self.connection.ops.max_name_length()))有没有人能给我个提示?我来看看qn是做什么的。
发布于 2016-03-09 20:43:55
问题出在属性名(但我仍然不知道为什么):
zps_calculated = models.ForeignKey( Carto...
我将其重命名为
zpsasd_calculated = models.ForeignKey( Carto
并将生成的约束名称更改为(sqlmigrate):a326518e5e22b0c2c1251e5bbb331adb
哇!
将属性zpsasd_calculated重命名为zps_calculated,并进行另一次迁移。
起作用了。
下一次我将使用自定义SQL https://www.ralphlepore.net/custom-foreign-key-constraints-with-django/进行迁移。
https://stackoverflow.com/questions/35886914
复制相似问题