Changeset 2411
- Timestamp:
- 02/27/06 11:58:28 (3 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/magic-removal/django/contrib/auth/models.py
r2305 r2411 1 1 from django.core import validators 2 2 from django.db import backend, connection, models 3 from django.contrib.contenttypes.models import Package3 from django.contrib.contenttypes.models import ContentType 4 4 from django.utils.translation import gettext_lazy as _ 5 5 import datetime … … 12 12 class Permission(models.Model): 13 13 name = models.CharField(_('name'), maxlength=50) 14 package = models.ForeignKey(Package, db_column='package')14 content_type = models.ForeignKey(ContentType) 15 15 codename = models.CharField(_('codename'), maxlength=100) 16 16 class Meta: 17 17 verbose_name = _('Permission') 18 18 verbose_name_plural = _('Permissions') 19 unique_together = ((' package', 'codename'),)20 ordering = (' package', 'codename')21 22 def __repr__(self): 23 return "% s | %s" % (self.package_id, self.name)19 unique_together = (('content_type', 'codename'),) 20 ordering = ('content_type', 'codename') 21 22 def __repr__(self): 23 return "%r | %s" % (self.content_type, self.name) 24 24 25 25 class Group(models.Model): … … 134 134 # The SQL below works out to the following, after DB quoting: 135 135 # cursor.execute(""" 136 # SELECT p. package, p.codename136 # SELECT p.content_type_id, p.codename 137 137 # FROM auth_permission p, auth_group_permissions gp, auth_user_groups ug 138 138 # WHERE p.id = gp.permission_id … … 145 145 AND gp.%s = ug.%s 146 146 AND ug.%s = %%s""" % ( 147 backend.quote_name(' package'), backend.quote_name('codename'),147 backend.quote_name('content_type_id'), backend.quote_name('codename'), 148 148 backend.quote_name('auth_permission'), backend.quote_name('auth_group_permissions'), 149 149 backend.quote_name('auth_user_groups'), backend.quote_name('id'), … … 157 157 if not hasattr(self, '_perm_cache'): 158 158 import sets 159 self._perm_cache = sets.Set(["%s.%s" % (p. package_id, p.codename) for p in self.user_permissions.all()])159 self._perm_cache = sets.Set(["%s.%s" % (p.content_type, p.codename) for p in self.user_permissions.all()]) 160 160 self._perm_cache.update(self.get_group_permissions()) 161 161 return self._perm_cache … … 176 176 return True 177 177 178 def has_module_perms(self, package_name):179 "Returns True if the user has any permissions in the given package."178 def has_module_perms(self, app_label): 179 "Returns True if the user has any permissions in the given app label." 180 180 if self.is_superuser: 181 181 return True 182 return bool(len([p for p in self.get_all_permissions() if p[:p.index('.')] == package_name]))182 return bool(len([p for p in self.get_all_permissions() if p[:p.index('.')] == app_label])) 183 183 184 184 def get_and_delete_messages(self): django/branches/magic-removal/django/contrib/contenttypes/models.py
r2377 r2411 1 1 from django.db import models 2 2 from django.utils.translation import gettext_lazy as _ 3 4 class Package(models.Model):5 label = models.CharField(_('label'), maxlength=20, primary_key=True)6 name = models.CharField(_('name'), maxlength=30, unique=True)7 class Meta:8 verbose_name = _('package')9 verbose_name_plural = _('packages')10 db_table = 'django_package'11 ordering = ('name',)12 13 def __repr__(self):14 return self.name15 3 16 4 class ContentTypeManager(models.Manager): … … 22 10 opts = model._meta 23 11 try: 24 return self.model._default_manager.get( python_module_name__exact=opts.module_name,25 package__label__exact=opts.app_label)12 return self.model._default_manager.get(app_label=opts.app_label, 13 model=opts.object_name.lower()) 26 14 except self.model.DoesNotExist: 27 15 # The str() is needed around opts.verbose_name because it's a 28 16 # django.utils.functional.__proxy__ object. 29 17 ct = self.model(name=str(opts.verbose_name), 30 package=Package.objects.get(label=opts.app_label), 31 python_module_name=opts.module_name) 18 app_label=opts.app_label, model=opts.object_name.lower()) 32 19 ct.save() 33 20 return ct 34 21 35 22 class ContentType(models.Model): 36 name = models.CharField( _('name'),maxlength=100)37 package = models.ForeignKey(Package, db_column='package')38 python_module_name = models.CharField(_('python module name'), maxlength=50)23 name = models.CharField(maxlength=100) 24 app_label = models.CharField(maxlength=100) 25 model = models.CharField(_('python model class name'), maxlength=100, unique=True) 39 26 objects = ContentTypeManager() 40 27 class Meta: … … 42 29 verbose_name_plural = _('content types') 43 30 db_table = 'django_content_type' 44 ordering = ('package', 'name') 45 unique_together = (('package', 'python_module_name'),) 31 ordering = ('name',) 46 32 47 33 def __repr__(self): 48 return "%s | %s" % (self.package_id, self.name)34 return self.name 49 35 50 def get_model_module(self): 51 "Returns the Python model module for accessing this type of content." 52 return __import__('django.models.%s.%s' % (self.package_id, self.python_module_name), '', '', ['']) 36 def model_class(self): 37 "Returns the Python model class for this type of content." 38 from django.db import models 39 return models.get_model(self.app_label, self.model) 53 40 54 41 def get_object_for_this_type(self, **kwargs): … … 59 46 so code that calls this method should catch it. 60 47 """ 61 return self. get_model_module().get_object(**kwargs)48 return self.model_class()._default_manager.get(**kwargs)
