AutocompleteGeneric, for GenericForeignKey or GenericManyToMany¶
Generic relation support comes in two flavors:
- for django’s generic foreign keys,
- and for django-generic-m2m’s generic many to many in autocomplete_light.contrib.generic_m2m,
AutocompleteGeneric¶
Example¶
import autocomplete_light
from cities_light.models import Country, City
from django.contrib.auth.models import User, Group
class AutocompleteTaggableItems(autocomplete_light.AutocompleteGenericBase):
choices = (
User.objects.all(),
Group.objects.all(),
City.objects.all(),
Country.objects.all(),
)
search_fields = (
('username', 'email'),
('name',),
('search_names',),
('name_ascii',),
)
autocomplete_light.register(AutocompleteTaggableItems)
API¶
GenericModelChoiceField¶
Example¶
from django import forms
import autocomplete_light
from models import TaggedItem
class TaggedItemForm(autocomplete_light.GenericModelForm):
content_object = autocomplete_light.GenericModelChoiceField(
widget=autocomplete_light.ChoiceWidget(
autocomplete='AutocompleteTaggableItems',
autocomplete_js_attributes={'minimum_characters': 0}))
class Meta:
model = TaggedItem
exclude = ('content_type', 'object_id')
API¶
GenericManyToMany¶
Example¶
Example model with related
:
from django.db import models
from django.db.models import signals
from django.contrib.contenttypes import generic
from genericm2m.models import RelatedObjectsDescriptor
class ModelGroup(models.Model):
name = models.CharField(max_length=100)
related = RelatedObjectsDescriptor()
def __unicode__(self):
return self.name
Example generic_m2m.GenericModelForm
usage:
import autocomplete_light
from autocomplete_light.contrib.generic_m2m import GenericModelForm, \
GenericModelMultipleChoiceField
from models import ModelGroup
class ModelGroupForm(GenericModelForm):
"""
Use AutocompleteTaggableItems defined in
gfk_autocomplete.autocomplete_light_registry.
"""
related = GenericModelMultipleChoiceField(
widget=autocomplete_light.MultipleChoiceWidget(
'AutocompleteTaggableItems'))
class Meta:
model = ModelGroup
Example ModelAdmin
:
from django.contrib import admin
from models import ModelGroup
from forms import ModelGroupForm
class ModelGroupAdmin(admin.ModelAdmin):
form = ModelGroupForm
admin.site.register(ModelGroup, ModelGroupAdmin)