zinnia.admin.forms
Covered: 40 lines
Missed: 9 lines
Skipped 11 lines
Percent: 81 %
 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(),
19
                                 required=False,
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.'))
36
        return data
38
    class Meta:
39
        """CategoryAdminForm's Meta"""
40
        model = Category
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()]
57
    class Meta:
58
        """EntryAdminForm's Meta"""
59
        model = Entry