Di Django, adakah tempat saya bisa mendapatkan daftar atau mencari model yang diketahui ORM?
django
django-models
interstar
sumber
sumber
from django.apps.apps import get_models
menghasilkanImportError: No module named 'django.apps.apps'
... ada ide?from django.apps import apps
>>apps.get_models
Buat daftar model menggunakan 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())
sumber
Jika Anda menginginkan kamus dengan semua model, Anda dapat menggunakan:
from django.apps import apps models = { model.__name__: model for model in apps.get_models() }
sumber
Jika Anda ingin bermain, dan tidak menggunakan solusi yang baik , Anda dapat bermain sedikit dengan introspeksi python:
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
Catatan: ini adalah kode yang cukup kasar; ini akan mengasumsikan bahwa semua model didefinisikan dalam "models.py" dan model tersebut diturunkan dari django.db.models.Model.
sumber
Jika Anda menggunakan aplikasi contenttypes, maka langsung saja: http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
sumber
Jika Anda mendaftarkan model Anda dengan aplikasi admin, Anda dapat melihat semua atribut kelas ini di dokumentasi admin.
sumber
Berikut cara sederhana untuk menemukan dan menghapus izin yang ada di database tetapi tidak ada dalam definisi model 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))
sumber