|
1 from django.conf import settings |
|
2 from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured |
|
3 from django.core import validators |
|
4 from django.db import connection |
|
5 from django.db.models.loading import get_apps, get_app, get_models, get_model, register_models |
|
6 from django.db.models.query import Q |
|
7 from django.db.models.manager import Manager |
|
8 from django.db.models.base import Model, AdminOptions |
|
9 from django.db.models.fields import * |
|
10 from django.db.models.fields.subclassing import SubfieldBase |
|
11 from django.db.models.fields.related import ForeignKey, OneToOneField, ManyToManyField, ManyToOneRel, ManyToManyRel, OneToOneRel, TABULAR, STACKED |
|
12 from django.db.models import signals |
|
13 from django.utils.functional import curry |
|
14 from django.utils.text import capfirst |
|
15 |
|
16 # Admin stages. |
|
17 ADD, CHANGE, BOTH = 1, 2, 3 |
|
18 |
|
19 def permalink(func): |
|
20 """ |
|
21 Decorator that calls urlresolvers.reverse() to return a URL using |
|
22 parameters returned by the decorated function "func". |
|
23 |
|
24 "func" should be a function that returns a tuple in one of the |
|
25 following formats: |
|
26 (viewname, viewargs) |
|
27 (viewname, viewargs, viewkwargs) |
|
28 """ |
|
29 from django.core.urlresolvers import reverse |
|
30 def inner(*args, **kwargs): |
|
31 bits = func(*args, **kwargs) |
|
32 return reverse(bits[0], None, *bits[1:3]) |
|
33 return inner |