繁体   English   中英

Django syncdb在抽象模型中循环引用失败

[英]Django syncdb fails with circular reference in abstract models

上次尝试同步数据库以进行新部署时,我在djangos syncdb机制中发现了一个有趣的行为。

我有两个应用程序alphabetcore ,其中核心存储了我的大部分模型。 现在,我用字母创建了一个新的抽象模型,其代码如下:

class Compare(models.Model):
    percentage = FloatField(default=0)
    speakers = IntegerField(default=Speaker.objects.count())

    class Meta:
         abstract = True

以及核心应用中的参照模型:

class Speaker(models.Model):
    language = CharField(max_length=300)

当我尝试使用syncdb命令同步数据库时,它由于ProgrammingError而失败,因为表core.speaker不存在。

为什么syncdb甚至检查抽象模型? 如何在我的项目中解决此循环引用?

(顺便说一下,我正在使用Django 1.6)

在字段定义中调用count()不正确。 加载模型后,Django会尝试评估查询。 对于您而言,这是在表尚未创建之前。 即使已经创建了表,每次模块加载时查询将仅评估一次,并且不会随着创建和删除实例而更新。

您可以将可调用对象作为默认值传递给模型字段,因此可以尝试

speakers = IntegerField(default=Speaker.objects.count)

然后,在创建模型实例时将对查询进行评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM