Подтвердить что ты не робот

Получить все имена таблиц в приложении 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
4b9b3361

Ответ 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, чтобы напрямую перейти к базе данных. Недостатком этого является то, что он не даст вам никаких таблиц перед синхронизацией.