2009-12-04 2 views

ответ

54
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() 
+0

Отредактировано, чтобы включить механизм для получения только установленных моделей приложений. Я действительно рекомендую посмотреть код команды syncdb. – cethegeek

+0

В этом ответе перечислены все таблицы, которые когда-либо использовали мой django, в том числе созданные приложениями, которые были однажды в INSTALLED_APPS, но больше не существуют. Есть ли способ узнать те, которые в настоящее время актуальны? – GreenAsJade

+0

Для будущих ссылок: https://stackoverflow.com/a/31184258/1937033 С Django 1.7 on вы можете использовать этот код, например, в своем admin.py, чтобы зарегистрировать все модели: 'from django.apps import apps от django.contrib импорта администратора из django.contrib.admin.sites импорта AlreadyRegistered app_models = apps.get_app_config ('my_app') get_models() для модели app_models:. попробовать: admin.site.register (модель) кроме AlreadyRegistered: pass' – ThePhi

0

Самый простой метод должен быть использовать API для отражения базы данных в Джанго, чтобы перейти непосредственно в базу данных. Недостатком этого является то, что он не даст вам никаких таблиц перед синхронизацией.

9

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