Kod źródłowy modułu watchdog_kj_kultura.organizations.forms
from atom.ext.crispy_forms.forms import SingleButtonMixin
from crispy_forms.layout import Fieldset, Layout
from django import forms
from django.utils.translation import ugettext_lazy as _
from ..users.models import User
from .emails import OrganizationFixEmail
from .models import MetaCategory, Organization
from leaflet.forms.widgets import LeafletWidget
[dokumenty]class OrganizationAdminForm(forms.ModelForm):
"""Organization management form for usage in
:class:`watchdog_kj_kultura.organizations.admin.OrganizationAdmin`
"""
def save(self, *args, **kwargs):
self.instance.meta = {category.key: self.cleaned_data['meta_%d' % (category.pk)]
for category in self.categories}
return super(OrganizationAdminForm, self).save(*args, **kwargs)
[dokumenty]class OrganizationFixForm(SingleButtonMixin, forms.ModelForm):
"""Report changes suggestion form for usage with
:class:`watchdog_kj_kultura.organizations.models.Organization`` instances.
"""
sources = forms.CharField(widget=forms.Textarea(),
label=_("Sources of information"),
help_text=_("Write about where to get this information " +
"so we can verify it."))
worker = forms.BooleanField(label=_("I am working in this institution"),
help_text=_("Mark, if you work in this institution."),
required=False)
def get_field_kwargs_for_category(self, category):
kwargs = dict(label=category.name, required=False)
if self.instance.meta:
kwargs.update(dict(initial=self.instance.meta.get(category.key, ''),
required=False))
return kwargs
def get_field_for_category(self, *args, **kwargs):
return forms.CharField(**self.get_field_kwargs_for_category(*args, **kwargs))
def __init__(self, *args, **kwargs):
super(OrganizationFixForm, self).__init__(*args, **kwargs)
self.categories = MetaCategory.objects.all()
self.meta_fields = {'meta_%d' % (category.pk): self.get_field_for_category(category)
for category in self.categories}
self.fields.update(self.meta_fields)
self.helper.layout = Layout(
Fieldset(
_('Basic data'),
'name', 'email', 'jst', 'pos', 'category'
),
Fieldset(
_('Metadatas'),
*self.meta_fields.keys()
),
Fieldset(
_('Verification'),
'sources',
'worker'
),
)
[dokumenty] def get_recipients(self):
"""Return emails of recipients of notifications.
"""
return [x.email for x in User.objects.filter(notify_about_fix=True).all()]
def save(self, *args, **kwargs):
obj = super(OrganizationFixForm, self).save(commit=False)
for category in self.categories:
obj.meta[category.key] = self.cleaned_data['meta_%d' % (category.pk)]
to = self.get_recipients()
if to:
context = {'object': obj,
'sources': self.cleaned_data['sources'],
'worker': self.cleaned_data['worker']}
OrganizationFixEmail().send(to, context)
return obj
class Meta:
model = Organization
fields = ['name', 'email', 'jst', 'pos', 'category']
widgets = {
'pos': LeafletWidget(),
}