2015-10-07 2 views
0

Я нашел интересное поведение в механизме syncdb djangos, поскольку в прошлый раз я попытался синхронизировать свою базу данных для нового развертывания.Ошибка Django syncdb с круговой ссылкой в ​​абстрактных моделях

У меня есть два приложения alphabet и core, где ядро ​​хранит большинство моих моделей. Теперь я создал новую абстрактной модели в алфавите с кодом, как:

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, кстати)

ответ

0

Вызов count() в определении поля является неверным. Django пытается оценить запрос при загрузке модели. В вашем случае это происходит до того, как таблица была создана. Даже если таблица была создана, запрос будет оцениваться только один раз при каждом загрузке модуля и не будет обновляться по мере создания и удаления экземпляров.

Вы можете передать вызываемые к модели полю как по умолчанию, так что вы можете попробовать

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

Тогда запрос будет оцениваться при создании экземпляра модели.

+0

безупречный! Огромное спасибо. – BlueSapphire

Смежные вопросы