Advertisement
mickymiseck

proxy_taggin

Aug 28th, 2012
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.47 KB | None | 0 0
  1. from django.db import models
  2. from django.contrib.contenttypes.models import ContentType
  3. from django.utils.translation import ugettext_lazy as _
  4.  
  5. from taggit.models import GenericTaggedItemBase, TaggedItemBase
  6.  
  7.  
  8. # Mixin
  9. class MVMTaggedBase(models.Model):
  10.     kind_name = ''
  11.     kind = models.CharField(verbose_name=_('Kind'), max_length=100, null=True)
  12.  
  13.     class Meta:
  14.         abstract = True
  15.  
  16.     @classmethod
  17.     def lookup_kwargs(cls, instance):
  18.         return {
  19.             'object_id': instance.pk,
  20.             'content_type': ContentType.objects.get_for_model(instance),
  21.             'kind' : cls.kind_name
  22.         }
  23.  
  24.     @classmethod
  25.     def bulk_lookup_kwargs(cls, instances):
  26.         # TODO: instances[0], can we assume there are instances.
  27.         return {
  28.             'object_id__in': [instance.pk for instance in instances],
  29.             'content_type': ContentType.objects.get_for_model(instances[0]),
  30.             'kind' : cls.kind_name
  31.         }
  32.  
  33.     @classmethod
  34.     def tags_for(cls, model, instance=None):
  35.         ct = ContentType.objects.get_for_model(model)
  36.         kwargs = {
  37.             '%s__content_type' % cls.tag_relname(): ct,
  38.             '%s__kind' % cls.tag_relname() : cls.kind_name
  39.         }
  40.         if instance is not None:
  41.             kwargs['%s__object_id' % cls.tag_relname()] = instance.pk
  42.         return cls.tag_model().objects.filter(**kwargs).distinct()
  43.  
  44.  
  45. class MVMTaggedItem(MVMTaggedBase, GenericTaggedItemBase, TaggedItemBase):
  46.  
  47.     class Meta:
  48.         verbose_name = _("Tagged Item")
  49.         verbose_name_plural = _("Tagged Items")
  50.  
  51.  
  52. class ActorTaggedItem(MVMTaggedItem):
  53.     kind_name = 'actor'
  54.  
  55.     class Meta:
  56.         verbose_name = _("Actor Item")
  57.         verbose_name_plural = _("Actor Items")
  58.         proxy = True
  59.         app_label = 'mvm'
  60.  
  61.  
  62. class IdentityTaggedItem(MVMTaggedItem):
  63.     kind_name = 'identity'
  64.  
  65.     class Meta:
  66.         verbose_name = _("Identity Item")
  67.         verbose_name_plural = _("Identity Items")
  68.         proxy = True
  69.         app_label = 'mvm'
  70.  
  71.  
  72. class RoleTaggedItem(MVMTaggedItem):
  73.     kind_name = 'role'
  74.  
  75.     class Meta:
  76.         verbose_name = _("Role Item")
  77.         verbose_name_plural = _("Role Items")
  78.         proxy = True
  79.         app_label = 'mvm'
  80.  
  81.  
  82. class PlaceTaggedItem(MVMTaggedItem):
  83.     kind_name = 'place'
  84.  
  85.     class Meta:
  86.         verbose_name = _("Place Item")
  87.         verbose_name_plural = _("Place Items")
  88.         proxy = True
  89.         app_label = 'mvm'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement