Получить все имена таблиц в приложении Django
Как получить все имена таблиц в приложении Django?
Я использую следующий код, но он не получает таблицы, созданные ManyToManyField
from django.db.models import get_app, get_models
app = get_app(app_name)
for model in get_models(app):
print model._meta.db_table
Ответы
Ответ 1
from django.db import connection
tables = connection.introspection.table_names()
seen_models = connection.introspection.installed_models(tables)
Как видно из команды syncdb для manage.py.
В комментарии ниже, спустя годы после ответа выше, ThePhi говорит (я его не тестировал):
from django.apps import apps
from django.contrib import admin
from django.contrib.admin.sites import AlreadyRegistered
app_models = apps.get_app_config('my_app').get_models()
Ответ 2
Самый простой ответ, который по-прежнему позволяет вам выбрать, какое приложение вы хотите, - это изменить ваш код с помощью одного дополнительного аргумента "include_auto_created".
from django.db.models import get_app, get_models
app = get_app(app_name)
for model in get_models(app, include_auto_created=True):
print model._meta.db_table
Очевидно, я получил это, следуя советам celope, чтобы прочитать источник syncdb, поэтому благодарим за это - просто документируем точный ответ, который включает имя приложения, поскольку это было то, что я хотел, и, возможно, другие тоже в будущем.
Ответ 3
Самый простой способ - использовать API-интерфейсы отражения базы данных в django, чтобы напрямую перейти к базе данных. Недостатком этого является то, что он не даст вам никаких таблиц перед синхронизацией.