A reusable Django app that allows you to add translatable tags to any other model.
Project description
A reusable Django app that allows you to add translatable tags to any other model.
Installation
To get the latest stable release from PyPi
pip install django-multilingual-tags
To get the latest commit from GitHub
pip install -e git+git://github.com/bitmazk/django-multilingual-tags.git#egg=multilingual_tags
Add multilingual_tags to your INSTALLED_APPS
INSTALLED_APPS = (
...,
'multilingual_tags',
)
Don’t forget to migrate your database
./manage.py migrate multilingual_tags
Usage
Add a generic relation to the model, that you intend to tag.
from django.contrib.contenttypes import generic
from django.db import models
class UserProfile(models.Model):
# ...
# some other model stuff goes here
# ...
special_attributes = generic.GenericRelation(
'multilingual_tags.TaggedItem',
)
Add the TaggingFormMixin to any of your modelforms of a model, you want to tag and configure the field with the settings dictionary.
from django import forms
from multilingual_tags.forms.mixins import TaggingFormMixin
class UserProfileForm(TaggingFormMixin, forms.ModelForm):
tag_field = {
# ``name`` is the name of the ``GenericRelation`` that was added to
# the model
'name': 'special_attributes',
'label': _('Special Attributes'),
'help_text': _('List any special attributes separated with comma.'),
'required': False,
}
The form mixin will automatically add data-class="multilingual-tags-field" to the form field. This allows you to easily add jquery-typeahead-tagging to your field, which is included in this app.
Simply add the static files from multilingual_tags to your template.
{% load static %}
{# Plain Bootstrap-like styles. #}
<link href="{% static "multilingual_tags/css/typeahead.tagging.css" %}" rel="stylesheet" media="screen">
{# You will also need jquery of course. #}
<script src="{% static "js/libs/jquery-1.9.1.js" %}"></script>
{# And then there's typeahead and the tagging plugin. #}
<script src="{% static "multilingual_tags/js/typeahead.bundle.min.js" %}"></script>
<script src="{% static "multilingual_tags/js/typeahead.tagging.js" %}"></script>
Then you can initialize your tagging field like so:
// The source of the tags for autocompletion
var tagsource = ['Foo', 'Bar', 'Anoter Tag', 'Even more tags',
'Such autocomplete', 'Many tags', 'Wow'];
// Turn the input into the tagging input
$('[data-class="multilingual-tags-field"').tagging(tagsource);
Et voila! That should really be all there is.
Admin
To add tags to a model, you have to add the TaggedItemInline to that model’s admin. In your own apps, you can just do the following:
from django.contrib import admin
from multilingual_tags.admin import TaggedItemInline
from my_app import models
class MyModelAdmin(admin.ModelAdmin):
inlines = [TaggedItemInline]
admin.site.register(models.MyModel, MyModelAdmin)
This will render the inline admin form for adding tagged items.
If you want to add tags to a third party app, you might need to import its admin instead of Django’s ModelAdmin and then unregister and re-register the model. One way to do it would be this:
from django.contrib import admin
from multilingual_tags.admin import TaggedItemInline
from other_app.admin import SomeModelAdmin
from other_app.models import SomeModel
class SomeModelCustomAdmin(SomeModelAdmin):
# be careful, if the other admin also defines admins, you need to add
# them as well
inlines = SomeModelAdmin.inlines + [TaggedItemInline]
admin.site.unregister(SomeModel)
admin.site.register(SomeModel, SomeModelCustomAdmin)
To get all the tags for an object, you can simply use the TagManager:
# Get all tags for a certain model instance
>> Tag.objects.get_for_obj(mymodel_instance)
[<Tag: mytag>, <Tag: myothertag>]
# .. or get all tags for an entire queryset
>> Tag.objects.get_for_queryset(MyModel.objects.all())
[<Tag: mytag>, <Tag: myothertag>]
Contribute
If you want to contribute to this project, please perform the following steps
# Fork this repository
# Clone your fork
mkvirtualenv -p python2.7 django-multilingual-tags
make develop
git co -b feature_branch master
# Implement your feature and tests
git add . && git commit
git push -u origin feature_branch
# Send us a pull request for your feature branch
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
Hashes for django-multilingual-tags-0.5.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f22c45fb65336a1354f1a2fb521175b3fe7832937dfa9daa79ea401dec4024f |
|
MD5 | 86a6ddf3654edc63b24a49a43fe11493 |
|
BLAKE2b-256 | 5f5fff41aaa3e1d1f4a1d39091ab7922f84e9e1e20d0b2931347a0a634966ddb |