Миграция в различные схемы баз данных в Python Django 5

У меня проблема с миграцией в базе данных PostgreSQL с 2 схемами: public и users. У меня есть модели пользователей и их профилей. Требуется поместить их в схему с именем «users», а затем создать суперпользователя и несколько основных пользователей. Но каждый раз, когда я делаю миграции, Django создает таблицы в схеме по умолчанию «public» или у меня возникают различные ошибки. Многочисленные попытки исправить это не привели к результату, поэтому мне нужна помощь.

Мои модели:

class MyUser(AbstractUser):
    class Meta:
        managed = True
        db_table = 'users\".\"user' # gives a problem

    email = models.EmailField(_("email address"), unique=True)

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["username"]

    objects = MyUserManager()

class MyProfile(models.Model):
    class Meta:
        managed = True
        db_table = 'users\".\"profile' # gives a problem

    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, default="Name")
    surname = models.CharField(max_length=200, default="Surname")

Мой менеджер:

class MyUserManager(BaseUserManager):
    def create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError(_("Email required"))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, password, **extra_fields):
        extra_fields.setdefault("is_staff", True)
        extra_fields.setdefault("is_superuser", True)
        extra_fields.setdefault("is_active", True)

        if extra_fields.get("is_staff") is not True:
            raise ValueError(_("is_staff=True required"))
        if extra_fields.get("is_superuser") is not True:
            raise ValueError(_("is_superuser=True required"))
        return self.create_user(email, password, **extra_fields)

Моя БД:

'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': "djangotest",
        'USER': "postgres",
        'PASSWORD': "********",
        'HOST': "localhost",
        'PORT': "5432",
        'OPTIONS': {
                    'options': '-c search_path=public,users'
                }

Возможно, что-то нужно добавить в маршрутизатор:

ROUTED_MODELS_SCHEMA = [MyUser]
class DataBaseRouter(object):
    def db_for_read(self, model, **hints):
        if model in ROUTED_MODELS_SCHEMA:
            return 'users'
        return None

    def db_for_write(self, model, **hints):
        if model in ROUTED_MODELS_SCHEMA:
            return 'users'
        return None

Если я набираю python manage.py migrate, у меня есть таблицы только в схеме «public». Если я ввожу python manage.py migrate с --database, у меня есть таблицы в схеме «users», но сервер жалуется на отсутствие миграции, которая должна быть уже выполнена, и я не могу создать суперпользователя. Если я использую db_table = 'users\".\"user', у меня возникает синтаксическая ошибка и я не могу создать ни одной таблицы. Я пытался найти ответ на разных сайтах и изменил различные файлы проекта, такие как dbrouter.py e.t.c., но эта проблема все еще существует. Пожалуйста, дайте мне несколько шагов, что я должен сделать. Или ссылку на действительно работающий проект на GitHub, чтобы проанализировать его. Спасибо.

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