X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/2c7b7a116ebce28ca62052456e8eaae5176e1786..d8dd5e33408239d7fb7b0e14199de1a8341b9858:/src/newtagging/models.py?ds=sidebyside diff --git a/src/newtagging/models.py b/src/newtagging/models.py index 83aabe4fc..b90ea8e83 100644 --- a/src/newtagging/models.py +++ b/src/newtagging/models.py @@ -62,10 +62,11 @@ class TagManager(models.Manager): object_id=obj.pk, tag__in=tags_for_removal).delete() # Add new tags - tags_to_add = [tag for tag in updated_tags - if tag not in current_tags] + tags_to_add = [tag for tag in updated_tags if tag not in current_tags] for tag in tags_to_add: - if tag not in current_tags: + existing = self.intermediary_table_model.objects.filter( + content_type__pk=content_type.pk, object_id=obj.pk, tag=tag) + if not existing: self.intermediary_table_model.objects.create(tag=tag, content_object=obj) tags_updated.send(sender=type(obj), instance=obj, affected_tags=tags_to_add + tags_for_removal) @@ -78,6 +79,16 @@ class TagManager(models.Manager): self.intermediary_table_model.objects.filter( content_type__pk=content_type.pk, object_id=obj.pk, tag=tag).delete() + def add_tag(self, obj, tag): + """ + Add tag to an object. + """ + content_type = ContentType.objects.get_for_model(obj) + relations = self.intermediary_table_model.objects.filter( + content_type__pk=content_type.pk, object_id=obj.pk, tag=tag) + if not relations: + self.intermediary_table_model.objects.create(tag=tag, content_object=obj) + def get_for_object(self, obj): """ Create a queryset matching all tags associated with the given