Префикс всех имен таблиц Django 1.11

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

Я нашел различные сообщения stackoverflow, такие как Как переименовать все файлы django. аутентификация по умолчанию, разрешения, таблицы групп? Префикс базы данных Django, и они упоминают несколько плагинов, таких как как https://github.com/benslavin/django-db-prefix и https://pypi.python.org/pypi/django-table-prefix/0.0.5 - но все они старые и не работают с Django 1.8 и выше (у меня 1.11)

Есть ли решение для Django 1.11? Я искал везде, но существующие плагины не работают, и каждый запрос функции, отправленный самому Django, был закрыт как неисправленный. Я пытался обновить плагины до версии 1.11, но они, честно говоря, выше моего понимания.

В частности, я хочу добавить префикс ко ВСЕМ таблицам, а не только к таблицам в моем конкретном проекте, включая встроенные таблицы Django. Поэтому я бы хотел, чтобы «DJANGO_AUTH» стал, например, «PREFIX_DJANGO_AUTH».

Если это имеет значение, база данных Oracle.


person Chris Burrus    schedule 01.03.2018    source источник
comment
Я думаю, вы можете указать, как вы хотите назвать таблицу Django: docs.djangoproject.com/en/2.0/ref/models/options/#db-table   -  person HenryM    schedule 01.03.2018
comment
Действительно странно, что вы не можете иметь другую схему в базе данных Oracle, это действительно так?   -  person wolfrevokcats    schedule 01.03.2018
comment
Унаследованный код действительно устарел и не будет работать с несколькими схемами. Возможно, это не невозможно, но было бы в 100 раз проще, если бы я мог этого избежать.   -  person Chris Burrus    schedule 01.03.2018
comment
Опубликовал ответ, который решает изменение имен нескольких имен здесь: stackoverflow.com/a/53374381/3601660. Однако это не исправит таблицы из приложений, которые вы не контролируете.   -  person c z    schedule 19.11.2018


Ответы (2)


Вы должны иметь возможность выбрать имя таблицы, которое вы хотите, используя класс Meta в вашей модели.

https://docs.djangoproject.com/en/2.0/ref/models/options/#db-table

class MyModel(models.Model)

    class Meta:
        db_table = 'yourtablename'

В противном случае по умолчанию имя приложения присоединяется к имени класса, чтобы создать имя таблицы.

person wobbily_col    schedule 01.03.2018
comment
Я должен был уточнить - я хочу переименовать ВСЕ таблицы, включая встроенные, такие как таблицы django.contrib.auth. Я добавил примечание для уточнения: кажется, ваше решение применимо только к моделям, которые я создаю, а не к встроенным приложениям django, а также к плагинам. - person Chris Burrus; 01.03.2018
comment
Хорошо, но я не уверен, как это сделать. Звучит не слишком красиво. - person wobbily_col; 01.03.2018

Хотя ответы пришли так поздно, я наконец получил ответ:

  1. Установите приложение

    pip install django-db-prefix
    
  2. Включите приложения в Settings.py

    INSTALLED_APPS = ['django_db_prefix',]
    
  3. Добавление префикса в Settings.py

    DB_PREFIX = "foo_"
    
person W Kenny    schedule 17.04.2020