Django में, क्या ऐसी कोई जगह है जहां मैं एक सूची प्राप्त कर सकता हूं या उन मॉडलों को देख सकता हूं जिनके बारे में ORM जानता है?
जवाबों:
सरल समाधान:
import django.apps
django.apps.apps.get_models()
डिफ़ॉल्ट रूप से apps.get_models()
शामिल नहीं है
यदि आप इन्हें भी शामिल करना चाहते हैं,
django.apps.apps.get_models(include_auto_created=True, include_swapped=True)
Django 1.7 से पहले, बजाय उपयोग:
from django.db import models
models.get_models(include_auto_created=True)
include_auto_created
पैरामीटर सुनिश्चित है कि टेबल परोक्ष द्वारा बनाई गई के माध्यम से ManyToManyField
रों साथ ही पुनर्प्राप्त किया जाएगा।
from django.apps.apps import get_models
उत्पादन ImportError: No module named 'django.apps.apps'
... कोई विचार?
from django.apps import apps
>>apps.get_models
Http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/ का उपयोग करके सूची मॉडल
from django.contrib.contenttypes.models import ContentType
for ct in ContentType.objects.all():
m = ct.model_class()
print "%s.%s\t%d" % (m.__module__, m.__name__, m._default_manager.count())
यदि आप खेलना चाहते हैं, और अच्छे समाधान का उपयोग नहीं करना चाहते हैं , तो आप अजगर आत्मनिरीक्षण के साथ थोड़ा खेल सकते हैं:
import settings
from django.db import models
for app in settings.INSTALLED_APPS:
models_name = app + ".models"
try:
models_module = __import__(models_name, fromlist=["models"])
attributes = dir(models_module)
for attr in attributes:
try:
attrib = models_module.__getattribute__(attr)
if issubclass(attrib, models.Model) and attrib.__module__== models_name:
print "%s.%s" % (models_name, attr)
except TypeError, e:
pass
except ImportError, e:
pass
नोट: यह कोड का एक मोटा हिस्सा है; यह मान लेगा कि सभी मॉडल "मॉडेलफ्रेम" में परिभाषित हैं और वे django.db.models.Model से विरासत में मिले हैं।
यदि आप contenttypes ऐप का उपयोग करते हैं, तो यह सीधा है: http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
यदि आप अपने मॉडल को व्यवस्थापक एप्लिकेशन के साथ पंजीकृत करते हैं, तो आप व्यवस्थापक दस्तावेज़ीकरण में इन वर्गों की सभी विशेषताओं को देख सकते हैं।
यहां डेटाबेस में मौजूद किसी भी अनुमतियों को खोजने और हटाने का एक सरल तरीका है, लेकिन ORM मॉडल परिभाषाओं में मौजूद नहीं है:
from django.apps import apps
from django.contrib.auth.management import _get_all_permissions
from django.contrib.auth.models import Permission
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **options):
builtins = []
for klass in apps.get_models():
for perm in _get_all_permissions(klass._meta):
builtins.append(perm[0])
builtins = set(builtins)
permissions = set(Permission.objects.all().values_list('codename', flat=True))
to_remove = permissions - builtins
res = Permission.objects.filter(codename__in=to_remove).delete()
self.stdout.write('Deleted records: ' + str(res))