diff options
Diffstat (limited to 'archaeological_warehouse/forms.py')
-rw-r--r-- | archaeological_warehouse/forms.py | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index 553a01ce5..94e31b759 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -20,6 +20,7 @@ from django import forms from django.conf import settings from django.forms.formsets import formset_factory +from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from ishtar_common.models import Person, valid_id @@ -27,7 +28,7 @@ from archaeological_finds.models import TreatmentType, FindBasket import models from ishtar_common import widgets from ishtar_common.forms import name_validator, reverse_lazy, \ - get_form_selection, TableSelect, ManageOldType, FinalForm + get_form_selection, TableSelect, ManageOldType, FinalForm, FormSet from archaeological_finds.forms import FindMultipleFormSelection, \ SelectFindBasketForm @@ -57,8 +58,15 @@ class SelectedDivisionForm(ManageOldType, forms.Form): initial=self.init_data.get('division') ) + +class DivisionFormSet(FormSet): + def clean(self): + """Checks that no divisions are duplicated.""" + return self.check_duplicate(('division',), + _("There are identical divisions.")) + SelectedDivisionFormset = formset_factory( - SelectedDivisionForm, can_delete=True) + SelectedDivisionForm, can_delete=True, formset=DivisionFormSet) SelectedDivisionFormset.form_label = _(u"Divisions") @@ -92,7 +100,7 @@ class WarehouseForm(ManageOldType, forms.Form): associated_models = {'warehouse_type': models.WarehouseType, 'person_in_charge': Person} - name = forms.CharField(label=_(u"Name"), max_length=40, + name = forms.CharField(label=_(u"Name"), max_length=200, validators=[name_validator]) warehouse_type = forms.ChoiceField(label=_(u"Warehouse type"), choices=[]) @@ -100,7 +108,7 @@ class WarehouseForm(ManageOldType, forms.Form): label=_(u"Person in charge"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-person'), - associated_model=Person), + associated_model=Person, new=True), validators=[valid_id(Person)], required=False) comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, @@ -148,6 +156,7 @@ class WarehouseDeletionForm(FinalForm): class ContainerForm(ManageOldType, forms.Form): form_label = _(u"Container") + file_upload = True associated_models = {'container_type': models.ContainerType, 'location': models.Warehouse, 'responsible': models.Warehouse} @@ -165,6 +174,13 @@ class ContainerForm(ManageOldType, forms.Form): reverse_lazy('autocomplete-warehouse'), associated_model=models.Warehouse, new=True), validators=[valid_id(models.Warehouse)]) + image = forms.ImageField( + label=_(u"Image"), help_text=mark_safe( + _(u"<p>Heavy images are resized to: %(width)dx%(height)d " + u"(ratio is preserved).</p>") % { + 'width': settings.IMAGE_MAX_SIZE[0], + 'height': settings.IMAGE_MAX_SIZE[1]}), + max_length=255, required=False, widget=widgets.ImageFileInput()) comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, required=False) @@ -192,7 +208,7 @@ class ContainerForm(ManageOldType, forms.Form): class ContainerModifyForm(ContainerForm): pk = forms.IntegerField(required=False, widget=forms.HiddenInput) - index = forms.IntegerField(_(u"Index")) + index = forms.IntegerField(label=_(u"ID")) def __init__(self, *args, **kwargs): super(ContainerModifyForm, self).__init__(*args, **kwargs) @@ -264,20 +280,20 @@ class LocalisationForm(forms.Form): form_label = _(u"Localisation") def __init__(self, *args, **kwargs): - container, warehouse = None, None + self.container, self.warehouse = None, None if 'warehouse' in kwargs: - warehouse = kwargs.pop('warehouse') + self.warehouse = kwargs.pop('warehouse') if 'container' in kwargs: - container = kwargs.pop('container') + self.container = kwargs.pop('container') super(LocalisationForm, self).__init__(*args, **kwargs) - if not warehouse: + if not self.warehouse: return - for divlink in warehouse.warehousedivisionlink_set.order_by( + for divlink in self.warehouse.warehousedivisionlink_set.order_by( 'order').all(): initial = u"-" - if container: + if self.container: q = models.ContainerLocalisation.objects.filter( - division=divlink, container=container) + division=divlink, container=self.container) if q.count(): initial = q.all()[0].reference self.fields['division_{}'.format(divlink.pk)] = forms.CharField( |