Projet

Général

Profil

Télécharger (2,09 ko) Statistiques
| Branche: | Tag: | Révision:

root / corbo / forms.py @ 1e3b89c6

1
from django import forms
2
from django.utils.translation import ugettext_lazy as _
3

    
4
from .models import Announce, Category, Broadcast
5
from .channels import get_channel_choices
6

    
7
class AnnounceForm(forms.ModelForm):
8
    transport_channel = forms.MultipleChoiceField(required=False,
9
                                                  choices=get_channel_choices(),
10
                                                  widget=forms.CheckboxSelectMultiple())
11

    
12
    class Meta:
13
        model = Announce
14
        widgets = {
15
            'publication_time': forms.TextInput(attrs={'class': 'datepicker',
16
                                                       'size': 8}),
17
            'expiration_time': forms.TextInput(attrs={'class': 'datepicker',
18
                                                      'size': 8})
19
        }
20

    
21
    def __init__(self, *args, **kwargs):
22
        super(AnnounceForm, self).__init__(*args, **kwargs)
23
        self.fields['transport_channel'].initial = [b.channel for \
24
                                                    b in self.instance.broadcast_set.all()]
25

    
26
    def clean_transport_channel(self):
27
        channels = self.cleaned_data['transport_channel']
28
        limit = 130
29
        if 'sms' in channels and \
30
           len(self.cleaned_data['text']) > limit:
31
            raise forms.ValidationError(_('Announce content exceeds %s chars'
32
                                          ' and cannot be sent by SMS' % limit))
33
        return channels
34

    
35
    def save(self, *args, **kwargs):
36
        instance = super(AnnounceForm, self).save(*args, **kwargs)
37
        if instance:
38
            print "CD: %s" % self.cleaned_data
39
            channels = self.cleaned_data['transport_channel']
40
            for channel in channels:
41
                Broadcast.objects.get_or_create(announce=instance,
42
                                                channel=channel)
43
            self.instance.broadcast_set.exclude(announce=instance,
44
                                                channel__in=channels).delete()
45
        return instance
46

    
47
class CategoryForm(forms.ModelForm):
48
    class Meta:
49
        fields = ('name', )
50
        model = Category
(3-3/11)