# -*- coding: utf-8 -*- from django import forms from django.conf import settings from django.utils.translation import ugettext_lazy as _ class AdminForm(forms.Form): model = None def __init__(self, *args, **kwargs): """ create dynamical translated fields fields """ if len(settings.LANGUAGES) in range(10): for lid, (code, name) in enumerate(settings.LANGUAGES): # uses enumerate for detect iteration number # first iteration is a default lang so it required fields required = True if lid == 0 else False class AdminFilterForm(forms.Form): """ class for filtering lists in admin panel """ model = None # which models work with exact_name = forms.CharField(label=_(u'Название'), required=False) name = forms.CharField(label=_(u'Часть названия'), required=False) def filter(self): """ return filtered queryset form must be cleaned before calling this method """ model = self.model data = self.cleaned_data name = data['name'] exact_name = data['exact_name'] if exact_name: qs = model.objects.filter(translations__name=name).distinct() return qs qs = model.objects.all() if name: qs = qs.filter(translations__name__icontains=name).distinct() return qs