Fea*_*nor 55 python django model
所以,我在MyApp文件夹中有一个models.py文件:
from django.db import models
class Model_One(models.Model):
...
class Model_Two(models.Model):
...
...
Run Code Online (Sandbox Code Playgroud)
它可以是大约10-15个班级. 如何找到MyApp中的所有模型并获取其名称?
由于模型不可迭代,我不知道这是否可行.
jul*_*ria 86
UPDATE
对于较新版本的Django,请查看下面的Sjoerd答案
2012年的原始答案:这是完成您想要做的事情的最佳方式:
from django.db.models import get_app, get_models
app = get_app('my_application_name')
for model in get_models(app):
# do something with the model
Run Code Online (Sandbox Code Playgroud)
在这个例子中,model是实际的模型,所以你可以用它做很多事情:
for model in get_models(app):
new_object = model() # Create an instance of that model
model.objects.filter(...) # Query the objects of that model
model._meta.db_table # Get the name of the model in the database
model._meta.verbose_name # Get a verbose name of the model
# ...
Run Code Online (Sandbox Code Playgroud)
Sjo*_*erd 69
从Django 1.7开始,您可以使用此代码,例如在您的admin.py中注册所有模型:
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()
for model in app_models:
try:
admin.site.register(model)
except AlreadyRegistered:
pass
Run Code Online (Sandbox Code Playgroud)
ped*_*res 14
我发现从应用程序中获取所有模型的最佳答案:
from django.apps import apps
apps.all_models['<app_name>'] #returns dict with all models you defined
Run Code Online (Sandbox Code Playgroud)
从@pedrotorres 解决方案出发,从@GiampaoloFerradini 的一些谨慎输入出发,这就是我最终使用的:
from django.apps import apps
app_models = [model.__name__ for model in apps.get_models()] # Returns a "list" of all models created
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27911 次 |
| 最近记录: |