управление.py syncdb не добавляет таблицы для некоторых моделей

StackOverflow https://stackoverflow.com/questions/1435523

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Кажется, я сталкивался с чем-то подобным.

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

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

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

$ 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top