2015-10-07 51 views
0

我在上次嘗試同步數據庫以進行新部署時,在djangos syncdb機制中發現了一個有趣的行爲。Django 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同步因爲表core.speaker不存在,所以命令失敗,因爲ProgrammingError

爲什麼syncdb甚至檢查抽象模型?我如何在我的項目中解決這個循環引用?

(我使用Django 1.6的方式)

回答

0

字段定義調用count()不正確。 Django嘗試在模型加載時評估查詢。就你而言,這是在表格創建之前。即使表已經創建,查詢只會在每次模塊加載時評估一次,並且不會隨着實例的創建和刪除而更新。

你可以通過一個調用來作爲默認的模型場,所以你可以嘗試

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

然後創建模型實例時,查詢將進行評估。

+0

完美!非常感謝。 – BlueSapphire