mirror of
https://github.com/django/django.git
synced 2025-06-05 03:29:12 +00:00
magic-removal: Fixed #1280 -- Removed contenttypes.Package model and changed ContentType field to have a 'model' field
git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2411 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
f0e185c762
commit
dac1a68645
@ -1,6 +1,6 @@
|
|||||||
from django.core import validators
|
from django.core import validators
|
||||||
from django.db import backend, connection, models
|
from django.db import backend, connection, models
|
||||||
from django.contrib.contenttypes.models import Package
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
@ -11,16 +11,16 @@ class SiteProfileNotAvailable(Exception):
|
|||||||
|
|
||||||
class Permission(models.Model):
|
class Permission(models.Model):
|
||||||
name = models.CharField(_('name'), maxlength=50)
|
name = models.CharField(_('name'), maxlength=50)
|
||||||
package = models.ForeignKey(Package, db_column='package')
|
content_type = models.ForeignKey(ContentType)
|
||||||
codename = models.CharField(_('codename'), maxlength=100)
|
codename = models.CharField(_('codename'), maxlength=100)
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('Permission')
|
verbose_name = _('Permission')
|
||||||
verbose_name_plural = _('Permissions')
|
verbose_name_plural = _('Permissions')
|
||||||
unique_together = (('package', 'codename'),)
|
unique_together = (('content_type', 'codename'),)
|
||||||
ordering = ('package', 'codename')
|
ordering = ('content_type', 'codename')
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "%s | %s" % (self.package_id, self.name)
|
return "%r | %s" % (self.content_type, self.name)
|
||||||
|
|
||||||
class Group(models.Model):
|
class Group(models.Model):
|
||||||
name = models.CharField(_('name'), maxlength=80, unique=True)
|
name = models.CharField(_('name'), maxlength=80, unique=True)
|
||||||
@ -133,7 +133,7 @@ class User(models.Model):
|
|||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
# The SQL below works out to the following, after DB quoting:
|
# The SQL below works out to the following, after DB quoting:
|
||||||
# cursor.execute("""
|
# cursor.execute("""
|
||||||
# SELECT p.package, p.codename
|
# SELECT p.content_type_id, p.codename
|
||||||
# FROM auth_permission p, auth_group_permissions gp, auth_user_groups ug
|
# FROM auth_permission p, auth_group_permissions gp, auth_user_groups ug
|
||||||
# WHERE p.id = gp.permission_id
|
# WHERE p.id = gp.permission_id
|
||||||
# AND gp.group_id = ug.group_id
|
# AND gp.group_id = ug.group_id
|
||||||
@ -144,7 +144,7 @@ class User(models.Model):
|
|||||||
WHERE p.%s = gp.%s
|
WHERE p.%s = gp.%s
|
||||||
AND gp.%s = ug.%s
|
AND gp.%s = ug.%s
|
||||||
AND ug.%s = %%s""" % (
|
AND ug.%s = %%s""" % (
|
||||||
backend.quote_name('package'), backend.quote_name('codename'),
|
backend.quote_name('content_type_id'), backend.quote_name('codename'),
|
||||||
backend.quote_name('auth_permission'), backend.quote_name('auth_group_permissions'),
|
backend.quote_name('auth_permission'), backend.quote_name('auth_group_permissions'),
|
||||||
backend.quote_name('auth_user_groups'), backend.quote_name('id'),
|
backend.quote_name('auth_user_groups'), backend.quote_name('id'),
|
||||||
backend.quote_name('permission_id'), backend.quote_name('group_id'),
|
backend.quote_name('permission_id'), backend.quote_name('group_id'),
|
||||||
@ -156,7 +156,7 @@ class User(models.Model):
|
|||||||
def get_all_permissions(self):
|
def get_all_permissions(self):
|
||||||
if not hasattr(self, '_perm_cache'):
|
if not hasattr(self, '_perm_cache'):
|
||||||
import sets
|
import sets
|
||||||
self._perm_cache = sets.Set(["%s.%s" % (p.package_id, p.codename) for p in self.user_permissions.all()])
|
self._perm_cache = sets.Set(["%s.%s" % (p.content_type, p.codename) for p in self.user_permissions.all()])
|
||||||
self._perm_cache.update(self.get_group_permissions())
|
self._perm_cache.update(self.get_group_permissions())
|
||||||
return self._perm_cache
|
return self._perm_cache
|
||||||
|
|
||||||
@ -175,11 +175,11 @@ class User(models.Model):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def has_module_perms(self, package_name):
|
def has_module_perms(self, app_label):
|
||||||
"Returns True if the user has any permissions in the given package."
|
"Returns True if the user has any permissions in the given app label."
|
||||||
if self.is_superuser:
|
if self.is_superuser:
|
||||||
return True
|
return True
|
||||||
return bool(len([p for p in self.get_all_permissions() if p[:p.index('.')] == package_name]))
|
return bool(len([p for p in self.get_all_permissions() if p[:p.index('.')] == app_label]))
|
||||||
|
|
||||||
def get_and_delete_messages(self):
|
def get_and_delete_messages(self):
|
||||||
messages = []
|
messages = []
|
||||||
|
@ -1,18 +1,6 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
class Package(models.Model):
|
|
||||||
label = models.CharField(_('label'), maxlength=20, primary_key=True)
|
|
||||||
name = models.CharField(_('name'), maxlength=30, unique=True)
|
|
||||||
class Meta:
|
|
||||||
verbose_name = _('package')
|
|
||||||
verbose_name_plural = _('packages')
|
|
||||||
db_table = 'django_package'
|
|
||||||
ordering = ('name',)
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
class ContentTypeManager(models.Manager):
|
class ContentTypeManager(models.Manager):
|
||||||
def get_for_model(self, model):
|
def get_for_model(self, model):
|
||||||
"""
|
"""
|
||||||
@ -21,35 +9,34 @@ class ContentTypeManager(models.Manager):
|
|||||||
"""
|
"""
|
||||||
opts = model._meta
|
opts = model._meta
|
||||||
try:
|
try:
|
||||||
return self.model._default_manager.get(python_module_name__exact=opts.module_name,
|
return self.model._default_manager.get(app_label=opts.app_label,
|
||||||
package__label__exact=opts.app_label)
|
model=opts.object_name.lower())
|
||||||
except self.model.DoesNotExist:
|
except self.model.DoesNotExist:
|
||||||
# The str() is needed around opts.verbose_name because it's a
|
# The str() is needed around opts.verbose_name because it's a
|
||||||
# django.utils.functional.__proxy__ object.
|
# django.utils.functional.__proxy__ object.
|
||||||
ct = self.model(name=str(opts.verbose_name),
|
ct = self.model(name=str(opts.verbose_name),
|
||||||
package=Package.objects.get(label=opts.app_label),
|
app_label=opts.app_label, model=opts.object_name.lower())
|
||||||
python_module_name=opts.module_name)
|
|
||||||
ct.save()
|
ct.save()
|
||||||
return ct
|
return ct
|
||||||
|
|
||||||
class ContentType(models.Model):
|
class ContentType(models.Model):
|
||||||
name = models.CharField(_('name'), maxlength=100)
|
name = models.CharField(maxlength=100)
|
||||||
package = models.ForeignKey(Package, db_column='package')
|
app_label = models.CharField(maxlength=100)
|
||||||
python_module_name = models.CharField(_('python module name'), maxlength=50)
|
model = models.CharField(_('python model class name'), maxlength=100, unique=True)
|
||||||
objects = ContentTypeManager()
|
objects = ContentTypeManager()
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('content type')
|
verbose_name = _('content type')
|
||||||
verbose_name_plural = _('content types')
|
verbose_name_plural = _('content types')
|
||||||
db_table = 'django_content_type'
|
db_table = 'django_content_type'
|
||||||
ordering = ('package', 'name')
|
ordering = ('name',)
|
||||||
unique_together = (('package', 'python_module_name'),)
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "%s | %s" % (self.package_id, self.name)
|
return self.name
|
||||||
|
|
||||||
def get_model_module(self):
|
def model_class(self):
|
||||||
"Returns the Python model module for accessing this type of content."
|
"Returns the Python model class for this type of content."
|
||||||
return __import__('django.models.%s.%s' % (self.package_id, self.python_module_name), '', '', [''])
|
from django.db import models
|
||||||
|
return models.get_model(self.app_label, self.model)
|
||||||
|
|
||||||
def get_object_for_this_type(self, **kwargs):
|
def get_object_for_this_type(self, **kwargs):
|
||||||
"""
|
"""
|
||||||
@ -58,4 +45,4 @@ class ContentType(models.Model):
|
|||||||
method. The ObjectNotExist exception, if thrown, will not be caught,
|
method. The ObjectNotExist exception, if thrown, will not be caught,
|
||||||
so code that calls this method should catch it.
|
so code that calls this method should catch it.
|
||||||
"""
|
"""
|
||||||
return self.get_model_module().get_object(**kwargs)
|
return self.model_class()._default_manager.get(**kwargs)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user