50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
|
from django.conf import settings
|
||
|
from django.db.models import loading, Manager
|
||
|
from django.utils import importlib
|
||
|
|
||
|
|
||
|
def get_model(label, import_module=True):
|
||
|
""" returns the modeladmin registred for model """
|
||
|
app_label, model_name = label.split('.')
|
||
|
model = loading.get_model(app_label, model_name)
|
||
|
if model is None:
|
||
|
# Sometimes the models module is not yet imported
|
||
|
for app in settings.INSTALLED_APPS:
|
||
|
if app.endswith(app_label):
|
||
|
app_label = app
|
||
|
importlib.import_module('%s.%s' % (app_label, 'admin'))
|
||
|
return loading.get_model(*label.split('.'))
|
||
|
return model
|
||
|
|
||
|
|
||
|
def queryset_as_manager(qs_class):
|
||
|
# Allow chained managers
|
||
|
# Based on http://djangosnippets.org/snippets/562/#c2486
|
||
|
class ChainerManager(Manager):
|
||
|
def __init__(self):
|
||
|
super(ChainerManager,self).__init__()
|
||
|
self.queryset_class = qs_class
|
||
|
|
||
|
def get_query_set(self):
|
||
|
return self.queryset_class(self.model)
|
||
|
|
||
|
def __getattr__(self, attr, *args):
|
||
|
try:
|
||
|
return getattr(type(self), attr, *args)
|
||
|
except AttributeError:
|
||
|
return getattr(self.get_query_set(), attr, *args)
|
||
|
return ChainerManager()
|
||
|
|
||
|
|
||
|
def get_field_value(obj, field_name):
|
||
|
names = field_name.split('__')
|
||
|
rel = getattr(obj, names.pop(0))
|
||
|
for name in names:
|
||
|
try:
|
||
|
rel = getattr(rel, name)
|
||
|
except AttributeError:
|
||
|
# maybe it is a query manager
|
||
|
rel = getattr(rel.get(), name)
|
||
|
return rel
|
||
|
|