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

У меня в базе данных была таблица blog_user, но я случайно восстановил неправильную резервную копию sql-файла, поэтому она исчезла. У меня сейчас нет таблицы blog_user в базе данных, но у меня есть модель пользователя, создающая миграцию.

Я попытался повторно запустить миграции, чтобы они заново создали таблицу.

Вот так:

python manage.py перенос нулевого блога

или

python manage.py перенос нулевого блога - подделка

Но получаю ошибки:

Я получаю сообщение об ошибке: Трассировка (последний вызов): файл "C:\Python_scripts\blog_and_shop\manage.py", строка 22, в файле main() "C:\Python_scripts\blog_and_shop\manage.py ", строка 18, в главном файле execute_from_command_line(sys.argv) "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\core\management_init_.py", строка 442, в файле утилиты execute_from_command_line.выполнить() "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\core\management_init_.py", строка 436, в "выполнить себя".fetch_command(подкоманда).run_from_argv(self.argv) Файл "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\core\management\base.py", строка 413, в run_from_argv self.execute(*args, **cmd_options) Файл "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\core\management\base.py", строка 459, в файле execute output = self.handle(*аргументы, **опции) Файл "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\core\management\base.py", строка 107, в файле-оболочке res = handle_func(*аргументы, **kwargs) файл "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\core\management\commands\migrate.py", строка 303, в файле handle pre_migrate_apps = pre_migrate_state.apps "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\utils\functional.py ", строка 47, в получаем res = экземпляр.dict[self.name] = файл self.func(экземпляр) "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\db\migrations\state.py", строка 566, в приложениях возвращает StateApps(self.real_apps, self.models) Файл "C:\Python_scripts\blog_and_shop.venv\lib\site-packages\django\db\migrations\state.py", строка 637, в init вызывает ошибку ValueError("\n".join(сообщение об ошибке в errors)) ValueError: Поле admin.LogEntry.user было объявлено с отложенной ссылкой на 'blog.user', но приложение 'blog' не предоставляет модель 'user'. Поле blog.Comment.author был объявлен с ленивой ссылкой на "blog.user", но приложение "blog" не предоставляет модель "user". Поле blog.Post.author было объявлено с ленивой ссылкой на "blog.user", но приложение "блог" не предоставляет модель "пользователь". Поле blog.Post.read_later_users был объявлен с ленивой ссылкой на 'blog.user', но приложение 'blog' не предоставляет модель 'user'. Поле blog.Post_read_later_users.user был объявлен с ленивой ссылкой на "blog.user", но приложение "blog" не предоставляет модель "user".

Я думал, что проблема может заключаться в том, что пользовательская модель определена где-то строчными буквами, а где-то еще прописными, поэтому возникает конфликт, но нет, везде одно и то же, прописные буквы.

Я не понимаю, в чем проблема, и не знаю, как ее решить

models.py из приложения "мой блог":

class Post(models.Model):
    title = models.CharField(max_length=255)
    # body = models.TextField()
    body = RichTextUploadingField(blank=True, null=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    slug = models.SlugField(max_length=1000, null=True, blank=True)
    tags = TaggableManager(blank=True)
    read_later_users = models.ManyToManyField(get_user_model(), related_name='read_later_posts')
    preview_image = models.ImageField(upload_to=get_file_path_preview_images, null=True, blank=True)
    class Meta:
        ordering = ["created"]

    def __str__(self):
        return self.title
    
    def get_absolute_url(self):
        return reverse("blog:post_detail", args=[self.id])





class User(AbstractUser):
    pass

P.S.: Если нужно предоставить какой-то другой код, прокомментируйте, и я добавлю его.

Вам необходимо создать специальное приложение для управления пользователями и не включать вашу пользовательскую модель в приложение blogs app. Приложение Django - это автономный модульный компонент, который обеспечивает определенную функциональность в рамках более крупного проекта Django. В вашем проекте Django может быть как можно больше приложений, каждое из которых предназначено для работы с определенной функцией или набором связанных функций. Это необходимо пользователям.

В командной строке или терминале выполните:

python manage.py startapp users

Добавьте пользователей в конфигурацию INSTALLED_APPS в settings.py:

INSTALLED_APPS = [
...
'users',
'blog',
...
]

Затем перейдите в каталог ваших пользовательских приложений в разделе models.py, добавьте,

class CustomUser(AbstractUser):
    pass

И, наконец, в вашем settings.py, добавьте:

AUTH_USER_MODEL = 'users.CustomUser'

Если вы находитесь в разработке (что я предполагаю), вы можете безопасно удалить файлы миграции и, при необходимости, удалить базу данных, а затем синхронизировать базу данных:

Запустите python manage.py makemigrations, затем python manage.py migrate, и ваша проблема будет устранена.

Вы можете посмотреть https://testdriven.io/blog/django-custom-user-model/ более надежные способы настройки аутентификации пользователей в Django.

Вернуться на верх