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()
Вернуться на верх