1
"""Forms for Zinnia admin"""
2
from django import forms
3
from django.db.models import ManyToOneRel
4
from django.db.models import ManyToManyRel
5
from django.contrib.sites.models import Site
6
from django.utils.translation import ugettext_lazy as _
7
from django.contrib.admin.widgets import RelatedFieldWidgetWrapper
9
from zinnia.models import Entry
10
from zinnia.models import Category
11
from zinnia.admin.widgets import TreeNodeChoiceField
12
from zinnia.admin.widgets import MPTTFilteredSelectMultiple
13
from zinnia.admin.widgets import MPTTModelMultipleChoiceField
16
class CategoryAdminForm(forms.ModelForm):
17
"""Form for Category's Admin"""
18
parent = TreeNodeChoiceField(label=_('parent category').capitalize(),
20
empty_label=_('No parent category'),
21
queryset=Category.tree.all(),
22
level_indicator=u'|--')
24
def __init__(self, *args, **kwargs):
25
super(CategoryAdminForm, self).__init__(*args, **kwargs)
26
rel = ManyToOneRel(Category, 'id')
27
self.fields['parent'].widget = RelatedFieldWidgetWrapper(
28
self.fields['parent'].widget, rel, self.admin_site)
30
def clean_parent(self):
31
"""Check if category parent is not selfish"""
32
data = self.cleaned_data['parent']
33
if data == self.instance:
34
raise forms.ValidationError(
35
_('A category cannot be parent of itself.'))
39
"""CategoryAdminForm's Meta"""
43
class EntryAdminForm(forms.ModelForm):
44
"""Form for Entry's Admin"""
45
categories = MPTTModelMultipleChoiceField(
46
Category.objects.all(), required=False, label=_('Categories'),
47
widget=MPTTFilteredSelectMultiple(_('categories'), False,
48
attrs={'rows': '10'}))
50
def __init__(self, *args, **kwargs):
51
super(EntryAdminForm, self).__init__(*args, **kwargs)
52
rel = ManyToManyRel(Category, 'id')
53
self.fields['categories'].widget = RelatedFieldWidgetWrapper(
54
self.fields['categories'].widget, rel, self.admin_site)
55
self.fields['sites'].initial = [Site.objects.get_current()]
58
"""EntryAdminForm's Meta"""