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

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Миграция в разные схемы базы данных в Python Django 5

Сообщение Anonymous »

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

Код: Выделить всё

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, у меня будут таблицы только в «общедоступной» схеме. Если я наберу python Manage.py Migrate с --database, у меня есть таблицы в схеме «пользователи», но сервер жалуется на отсутствие миграции, которая уже должна быть выполнена, и я не могу создать суперпользователя.Если я использую db_table = 'users\".\"user', у меня возникает синтаксическая ошибка, и я не могу создать таблицу.
Я пытался найти ответ на разных сайтах и ​​менял разные файлы проекта. например dbrouter.py и т. д. но эта проблема все еще существует. Подскажите, пожалуйста, какие действия, что мне делать. Или ссылку на реально работающий проект на GitHub для его анализа. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/792 ... n-django-5
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»