Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Tree: 46fdca9049
Fetching contributors…

Cannot retrieve contributors at this time

62 lines (48 sloc) 1.524 kB
from django.db import models
from django.contrib.contenttypes.models import ContentType
class ContentTypeLimiter(object):
def q_object(self):
return models.Q(pk__in=[])
def add_to_query(self, query, *args, **kwargs):
query.add_q(self.q_object(), *args, **kwargs)
class ContentTypeRegistryLimiter(ContentTypeLimiter):
def __init__(self):
self.classes = []
def register_class(self, cls):
self.classes.append(cls)
def unregister_class(self, cls):
self.classes.remove(cls)
def q_object(self):
contenttype_pks = []
for cls in self.classes:
try:
if issubclass(cls, models.Model):
if not cls._meta.abstract:
contenttype = ContentType.objects.get_for_model(cls)
contenttype_pks.append(contenttype.pk)
except:
pass
return models.Q(pk__in=contenttype_pks)
class ContentTypeSubclassLimiter(ContentTypeLimiter):
def __init__(self, cls, inclusive=False):
self.cls = cls
self.inclusive = inclusive
def q_object(self):
contenttype_pks = []
for subclass in self.cls.__subclasses__():
try:
if issubclass(subclass, models.Model):
if not subclass._meta.abstract:
if not self.inclusive and subclass is self.cls:
continue
contenttype = ContentType.objects.get_for_model(subclass)
contenttype_pks.append(contenttype.pk)
except:
pass
return models.Q(pk__in=contenttype_pks)
def fattr(*args, **kwargs):
def wrapper(function):
for key in kwargs:
setattr(function, key, kwargs[key])
return function
return wrapper
Jump to Line
Something went wrong with that request. Please try again.