You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

66 lines
2.1 KiB

# -*- 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
class EventsAdminFilterFormMixin(forms.Form):
no_theme = forms.BooleanField(label=_(u'Без темы'), required=False)
bad_url = forms.BooleanField(label=_(u'Подозрение на неправильный урл'), required=False)
url = forms.CharField(label=_(u'URL'), required=False)
def filter(self):
qs = super(EventsAdminFilterFormMixin, self).filter()
if self.cleaned_data['bad_url']:
qs = qs.filter(bad_url=True)
if self.cleaned_data['no_theme']:
qs = qs.filter(theme__isnull=True)
if self.cleaned_data['url']:
qs = qs.filter(url=self.cleaned_data['url'])
return qs