Django - свежая база данных и нет такой таблицы
Я использую свое приложение Complex Jobs в продакшене, и оно работает нормально, с базой данных sqlite. Я пытаюсь создать новую базу данных с нуля и не могу сделать это ни с помощью миграций, ни пытаясь сделать их еще раз:
Когда я пытаюсь повторно использовать свои миграции:
Когда я пытался удалить все файлы миграции:
Как я могу выяснить, что происходит? Где проблема с таблицей jobs_role?
На ошибку указывает:
File "/backend/server/jobs/admin.py", line 59, in TagCategoryDefaultImportanceAdmin
extra = len(Role.objects.all())
Это означает, что при интерпретации файла, он уже выполнит этот запрос. Таким образом, это также происходит, если база данных еще не полностью мигрирована, отсюда и ошибка.
Как (сильное) эмпирическое правило, вы должны стараться избегать выполнения запросов при интерпретации файла (чтение файла в память), поскольку они будут выполняться до начала работы сервера и до того, как база данных может быть правильно настроена. Даже если это сработает, это будет означать, что extra
принимает за значение количество элементов, когда вы запускаете сервер: если вы позже добавите/удалите роль, то extra
не изменится.
Обычно вы должны попытаться обернуть логику в функцию так, чтобы она оценивала Role.objects.all()
только при выполнении функции, и такие функции администрирования обычно срабатывают только тогда, когда пользователь посещает страницы администрирования.
As for this specific case, you can use the .get_extra(…)
[Django-doc] and .get_max_num(…)
methods [Django-doc]:
class TagCategoryDefaultImportanceAdmin(admin.TabularInline):
model = TagCategoryDefaultImportance
formset = TagCategoryDefaultImportanceAdminFormset
def get_max_num(request, obj=None, **kwargs):
return Role.objects.count()
def get_extra(self, request, obj=None, **kwargs):
return Role.objects.count()