Add tags to any model in Django via ModelViewSet
Project description
Django Flexi Tag
A flexible and efficient tagging system for Django models that allows you to add, remove, and manage tags on any Django model with minimal configuration.
Features
- Easy Integration: Works seamlessly with Django REST Framework ViewSets
- Flexible Tag Storage: Uses PostgreSQL JSONField for efficient and flexible tag storage
- Automatic Model Generation: Generates auxiliary Tag models for your existing models
- Bulk Operations: Support for bulk tag operations on multiple objects
- Django Compatibility: Works across multiple Django versions (1.10 to 5.0)
- Python Compatibility: Supports Python 2.7 and Python 3.4+
Installation
Installation using pip:
pip install dj-flexi-tag
For development and testing:
pip install dj-flexi-tag[dev,test]
For documentation development:
pip install dj-flexi-tag[docs]
For all dependencies:
pip install dj-flexi-tag[dev,test,docs]
Add flexi_tag to your INSTALLED_APPS and run migrations:
INSTALLED_APPS = (
# other apps here...
'flexi_tag',
)
Testing
Run the tests with:
python runtests.py
Use the --verbose flag for more detailed output:
python runtests.py --verbose
Use the --interactive flag for interactive mode:
python runtests.py --interactive
Basic Usage
1. Define Your Models with FlexiTagMixin
from flexi_tag.utils.models import FlexiTagMixin
class YourModel(FlexiTagMixin):
name = models.CharField(max_length=100)
# other fields...
2. Generate Tag Models
Run the management command:
python manage.py generate_tag_models
This will create a flexi_generated_model.py file in the same directory as your model, which contains a YourModelTag model. The command will also automatically add the appropriate import statement to your models.py file and run makemigrations to generate migration files for the new models.
from .flexi_generated_model import YourModelTag # noqa
If multiple tag models are generated, they will be imported in a single line:
from .flexi_generated_model import FirstModelTag, SecondModelTag # noqa
3. Apply Migrations
After the tag models have been generated and migrations created, apply them with:
python manage.py migrate
4. Add Tagging to Your ViewSet
from rest_framework import viewsets
from flexi_tag.utils.views import TaggableViewSetMixin
from .models import YourModel
class YourModelViewSet(viewsets.ModelViewSet, TaggableViewSetMixin):
queryset = YourModel.objects.all()
serializer_class = YourModelSerializer
5. Use the Tagging API
Add a tag:
POST /your-model/1/add_tag/
{"key": "important"}
Add multiple tags:
POST /your-model/1/bulk_add_tag/
{"keys": ["important", "urgent"]}
Remove a tag:
POST /your-model/1/remove_tag/
{"key": "important"}
Advanced Usage
For more advanced usage, including programmatic tag management, custom tag validation, and more detailed configuration options, please refer to the documentation.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dj-flexi-tag-1.1.3a1.tar.gz.
File metadata
- Download URL: dj-flexi-tag-1.1.3a1.tar.gz
- Upload date:
- Size: 29.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc24f46b7d5185500640accc5393883552c78df25de5e48517fce6c878737e26
|
|
| MD5 |
b664eb09e1cac764e6cedaff9e4de0f0
|
|
| BLAKE2b-256 |
c9ffaf5690a59b1bc91527fbabe00c8bd3e3f1b3a888466c1ce4689b9d963464
|
File details
Details for the file dj_flexi_tag-1.1.3a1-py3-none-any.whl.
File metadata
- Download URL: dj_flexi_tag-1.1.3a1-py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0fbcfe10a191add777a83b1e2087131deab18c3f877afc9ebda6ea4fae47602
|
|
| MD5 |
f36379541fe585d173b079cf877a5ad2
|
|
| BLAKE2b-256 |
c564974dfb8e596fc91c0095bab1212249959587c07bd4d9b5c3135107b6d611
|