Guest User

Django: Difference between save() and create()

a guest
Nov 18th, 2010
970
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.55 KB | None | 0 0
  1.     # the version that runs fine
  2.     def add_tag(self, obj, tag_name):
  3.         """
  4.        Associates the given object with a tag.
  5.        """
  6.         tag_names = parse_tag_input(tag_name)
  7.         if not len(tag_names):
  8.             raise AttributeError(_('No tags were given: "%s".') % tag_name)
  9.         if len(tag_names) > 1:
  10.             raise AttributeError(_('Multiple tags were given: "%s".') % tag_name)
  11.         tag_name = tag_names[0]
  12.         try:
  13.             tag = Tag.objects.get(slug=slugify(tag_name))
  14.         except Tag.DoesNotExist:
  15.             tag = Tag(name=tag_name)
  16.             tag.save()
  17.         else:
  18.             # check if there is a preferred synonym for this tag
  19.             try:
  20.                 related_tag = RelatedTag.objects.get(tag=tag, relation_type='=>')
  21.             except RelatedTag.DoesNotExist:
  22.                 pass
  23.             else:
  24.                 # there is a preferred synonym; use it instead of the original
  25.                 tag = related_tag.related_tag
  26.         ctype = ContentType.objects.get_for_model(obj)
  27.         try:
  28.             ti = TaggedItem.objects.get(tag=tag, content_type=ctype, object_id=obj.pk)
  29.         except TaggedItem.DoesNotExist:
  30.             pass
  31.         else:
  32.             ti = TaggedItem(tag=tag, content_type=ctype, object_id=obj.pk)
  33.             ti.save()
  34.  
  35.  
  36.     # the one that raises db error
  37.     def add_tag(self, obj, tag_name):
  38.         """
  39.        Associates the given object with a tag.
  40.        """
  41.         tag_names = parse_tag_input(tag_name)
  42.         if not len(tag_names):
  43.             raise AttributeError(_('No tags were given: "%s".') % tag_name)
  44.         if len(tag_names) > 1:
  45.             raise AttributeError(_('Multiple tags were given: "%s".') % tag_name)
  46.         tag_name = tag_names[0]
  47.         if tagging_settings.FORCE_LOWERCASE_TAGS:
  48.             tag_name = tag_name.lower()
  49.         tag, created = self.get_or_create(slug=slugify(tag_name),
  50.                                           defaults={'name': tag_name})
  51.         if not created:
  52.             # check if there is a preferred synonym for this tag
  53.             try:
  54.                 related_tag = RelatedTag.objects.get(tag=tag, relation_type='=>')
  55.             except RelatedTag.DoesNotExist:
  56.                 pass
  57.             else:
  58.                 # there is a preferred synonym; use it instead of the original
  59.                 tag = related_tag.related_tag
  60.         ctype = ContentType.objects.get_for_model(obj)
  61.         TaggedItem._default_manager.get_or_create(
  62.             tag=tag, content_type=ctype, object_id=obj.pk)
Advertisement
Add Comment
Please, Sign In to add comment