manage.py syncdb не добавляет таблицы для некоторых моделей - PullRequest
4 голосов
/ 17 сентября 2009

Мой второй не очень хороший вопрос дня: у меня есть проект django с четырьмя установленными приложениями. Когда я запускаю manage.py syndb, он создает таблицы только для двух из них. Насколько мне известно, в файлах моих моделей проблем нет, и все приложения указаны в INSTALLED_APPS в моем файле настроек. Manage.py syndb просто игнорирует два моих приложения.

Одной из уникальных черт двух «игнорируемых» приложений является то, что файлы моделей импортируют модели из двух других приложений и используют их в качестве внешних ключей (не знаю, хорошо это или плохо, но помогает мне остаться организовано). Я не думаю, что это проблема, потому что я закомментировал модели с внешним ключом, а таблицы еще не созданы. Я в тупике.

ОБНОВЛЕНИЕ: Когда я закомментирую строки, импортирующие файлы моделей из других приложений, syndb создает мои таблицы. Возможно, я не понимаю, как файлы моделей в отдельных приложениях связаны с другими. Я думал, что можно использовать модель из другого приложения в качестве внешнего ключа, просто импортировав ее. Не правда?

Ответы [ 2 ]

8 голосов
/ 17 сентября 2009

Кажется, я столкнулся с чем-то похожим.

У меня была проблема, когда модель не сбрасывалась. В этом случае оказалось, что в моих моделях произошла ошибка, которая не выплевывалась.

Хотя я думаю, что syncdb при запуске выдает какую-то ошибку.

В любом случае попробуйте импортировать файл вашей модели из оболочки и посмотрите, сможете ли вы.

$ manage.py shell
>>> from myapp import models
>>>

Если в файле есть ошибка, на это следует указать.

Судя по вашему обновлению, может возникнуть проблема с перекрестным импортом. Вместо:

from app1.models import X

class ModelA(models.Model):
    fk = models.ForeignKey(X)

Попробуйте:

class ModelA(models.Model):
    fk = models.ForeignKey("app1.X")

... хотя я думаю, что вы должны получить ошибку на syncdb.

6 голосов
/ 17 сентября 2009

К сожалению, manage.py молча не может загрузить приложение, если в файле models.py есть ошибка импорта ( ticket # 10706 ). Скорее всего, в одном из ваших файлов models.py есть опечатка ... внимательно проверьте все операторы импорта (или используйте pylint).

Недавно syncdb прекратил загрузку нескольких моих приложений, и sqlall дал мне сообщение об ошибке «Приложение с меткой foo не найдено». Не зная, что это иногда означает «Приложение с меткой foo найдено, но не может быть загружено из-за повышения ImportError», мне потребовалось полчаса, чтобы понять, что я пытался импортировать haslib вместо hashlib в один из мои файлы models.py.

...