Comments (2)
(#470 is related to this)
from django-taggit.
Was using this as a way to explore the library this morning, Maybe something like this would work?
Idea here is provide a base_name and either get or create a tag with that base name.
Find all existing case insensitive versions of that tag, and update the to use the one that matches base_name. Then delete all the other tags.
from taggit.models import Tag, TaggedItem
def update_vs_delete_tags(base_tag_name):
"""
Identifies tags that are duplicates of the base_tag_name case insensitive value.
Ignores any duplicate values.
"""
duplicate_tags = Tag.objects.filter(name__iexact=base_tag_name).exclude(tag__name=base_tag_name)
existing_items = set(TaggedItem.objects.filter(tag__name=base_tag_name).values_list("object_id", "content_type_id"))
to_update = []
tagged_items = TaggedItem.objects.filter(tag__in=duplicate_tags)
for tagged_item in tagged_items:
comparison = (tagged_item.object_id, tagged_item.content_type_id)
if comparison not in existing_items:
to_update.append(tagged_item.id)
existing_items.add(comparison)
return to_update
def merge_case_insensitive_tags(base_tag_name):
to_update = update_vs_delete_tags(base_tag_name)
base_tag, _ = Tag.objects.get_or_create(name=base_tag_name)
TaggedItem.objects.filter(tag__in=to_update).update(
tag_id=base_tag.id
)
# Remove All Tags that are now redundant
Tag.objects.filter(name__iexact=base_tag_name).exclude(tag__name=base_tag_name).delete()
from django-taggit.
Related Issues (20)
- Add support for initialising tags via a list on object creation HOT 1
- Add support for new async api HOT 2
- Getting this error while running tests: 'index_together' is deprecated. Use 'Meta.indexes' in 'taggit.TaggedItem' instead. HOT 5
- tag entered in Cyrillic be displayed in Latin
- Tag Ordering Inconsistent HOT 4
- Tags longer than 100 chars raise 500 error HOT 15
- Django Taggit 5.0 is not compatible with Django <4.1 HOT 4
- RTD builds are broken HOT 1
- Multiple queries when adding tags HOT 3
- Reverse query name for 'XXX' clashes
- New 5.0.0 migrations fails: Found wrong number (0) of indexes HOT 3
- DRF - Incorrectly processed Tag input string HOT 2
- Cannot query using tags__name__in HOT 1
- Ticket objects need to have a primary key value before you can access their tags HOT 1
- Add Django 5.0 Support
- Update Python Support
- [October 2024] Remove Support of Python 3.8
- Mypy Support For TaggableManager HOT 1
- Getting 'Python int too large to convert to SQLite INTEGER' when adding tags in DRF application HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from django-taggit.