class ColaboradorForm(forms.ModelForm): lat = forms.FloatField(required=False) lon = forms.FloatField(required=False) def clean_lat(self): lat = self.cleaned_data['lat'] if not lat: raise ValidationError("Indica donde estás") return lat def is_valid(self): valid = super(ColaboradorForm, self).is_valid() if not valid: return valid if not self.data["email"] and not self.data["telefono"]: return False return True def save(self, commit=True): m = super(ColaboradorForm, self).save(commit=False) m.geom = Point(self.cleaned_data['lon'], self.cleaned_data['lat'], srid=4326) if commit: m.save() return m class Meta: model = Colaborador fields = '__all__' exclude = ['geom']
class HomeForm(forms.Form): name = forms.CharField( min_length=1, max_length=255, strip=True, widget=forms.TextInput(attrs={'class': 'form-control'}) ) lat = forms.FloatField( widget=forms.HiddenInput() ) lng = forms.FloatField( widget=forms.HiddenInput() ) radius = forms.IntegerField( max_value='1000000000', min_value='5', widget=forms.NumberInput(attrs={'class': 'form-control'}), initial=50 ) module = forms.ModelChoiceField( widget=forms.RadioSelect, queryset=Module.objects.all(), empty_label='モジュールを選択', required=True ) class Meta: labels = { 'radius': 'Radius', 'name': 'Name', 'module': 'Module' }
class AccessibleLocalForm(forms.ModelForm): lat = forms.FloatField(required=True, min_value=-90, max_value=90) # Latitude: -90° to 90° lng = forms.FloatField(required=True, min_value=-180, max_value=180) # Longitude: -180° to 180° class Meta: model = AccessibleLocal fields = ['name', 'comments', 'lat', 'lng', 'rank'] labels = { 'name': 'Nome do local:', 'comments': 'Descrição do local:', 'rank': 'Nível de Acessibilidade:', } widgets = { 'comments': Textarea() } def __init__(self, *args, **kwargs): super(AccessibleLocalForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_id = 'manage_local' self.helper.form_method = 'post' self.helper.form_action = 'index' self.helper.layout = Layout( Field('name', id='name'), Field('comments', id='comments', rows=3), Field('rank', id='rank'), Div(Field('lat', type='hidden', id='lat'), Field('lng', type='hidden', id='lon'), id='div_id_coords' ), Submit('save', 'Salvar', css_class='btn-success') )
class EstablishmentForm(forms.ModelForm): closing_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) construction_expiration_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) inactivate_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) last_plan_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) next_inspection_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) permit_expiration_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) permit_print_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) reactivate_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) renewal_received_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) renewal_sent_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) setup_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) status_change_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) test_expiration_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) status_change_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) test_expiration_date = DateTimeFieldNull0(input_formats=DATE_FORMATS, required=False) lat = forms.FloatField(required=False) lon = forms.FloatField(required=False) location = forms.PointField(required=False) class Meta: model = Establishment def clean(self): lat = self.cleaned_data.get('lat', None) lon = self.cleaned_data.get('lon', None) if lat and lon: self.cleaned_data['location'] = Point(lon, lat) return self.cleaned_data
class SymptonsForm(forms.ModelForm): temperature = forms.FloatField(min_value=36, max_value=45, help_text='Temperatura corporal', label='Temperatura', initial=36.5) edad = forms.IntegerField(help_text='Edad actual', label='Edad', initial=False, required=True, min_value=1, max_value=120) sexo = forms.ChoiceField(help_text='Género', label='Género', initial=False, required=False, choices=((1, ''), (2, 'Hombre'), (3, 'Mujer'))) tos = forms.BooleanField(help_text='¿Tienes tos?', label='Tos', initial=False, required=False) dolor_cabeza = forms.BooleanField(help_text='¿Tienes dolor de cabeza?', label='Dolor de Cabeza', initial=False, required=False) dolor_garganta = forms.BooleanField(help_text='¿Tienes dolor de garganta?', label='Dolor de garganta', initial=False, required=False) respiracion = forms.BooleanField( help_text='¿Tienes dificultad para respirar?', label='Dificultad para Respirar', initial=False, required=False) latitude = forms.FloatField(initial=20, label='Latitud', required=False) #, disabled='disabled') longitude = forms.FloatField(initial=-105, label='Longitud', required=False) #, disabled='disabled') # location = SpatialLocationField() class Meta: model = Person fields = [ 'temperature', 'latitude', 'longitude', 'age', 'sexo', ]
class CreateOccurrence(forms.ModelForm): ''' Form for create an occurrence ''' lat = forms.FloatField(required=True) long = forms.FloatField(required=True) class Meta: model = models.Occurrence fields = ( 'lat', 'long', 'description', 'category', )
class GeometryQueryForm(QuerySetForm): """A form providing GeoQuerySet method arguments.""" format = fields.GeoFormatField(required=False) op = fields.GeoFormatField(required=False) precision = forms.IntegerField(required=False) # Tolerance value for geometry simplification simplify = forms.FloatField(required=False) srs = fields.SpatialReferenceField(required=False) def select(self): kwargs = {} data = self.cleaned_data tolerance, srs, format = map(data.get, ('simplify', 'srs', 'format')) expr = field = query.geo_field(self.queryset).name srid = getattr(srs, 'srid', None) if srid: expr = functions.Transform(expr, srid) self.queryset.query.add_context('transformed_srid', srid) if data['op']: expr = data['op'](expr) if data['precision'] is not None: kwargs.update(precision=data['precision']) if tolerance: expr = query.Simplify(expr, tolerance) if format: expr = format(expr, **kwargs) if expr != field: attrname = self.data.get('format') self.queryset = self.queryset.annotate(**{attrname: expr})
class GeometryQueryForm(QuerySetForm): """A form providing GeoQuerySet method arguments.""" format = forms.CharField(required=False) precision = forms.IntegerField(required=False, initial=4) # Tolerance value for geometry simplification simplify = forms.FloatField(required=False) srs = fields.SpatialReferenceField(required=False) def clean_precision(self): # Unfortunately initial values are not used as default values. return (self.cleaned_data['precision'] or self.fields['precision'].initial) def select(self): data = self.cleaned_data kwargs = {'precision': data['precision']} tolerance, srs, format = map(data.get, ('simplify', 'srs', 'format')) srid = getattr(srs, 'srid', None) try: has_format = self.queryset.has_format(format) except AttributeError: # Handle default GeoQuerySet. try: self.queryset = getattr(self.queryset, format)(**kwargs) except AttributeError: pass else: if has_format: kwargs.update(format=format) self.queryset = self.queryset.simplify(tolerance, srid, **kwargs)
class GeometryQueryForm(QuerySetForm): """A form providing GeoQuerySet method arguments.""" format = forms.CharField(required=False) precision = forms.IntegerField(required=False) # Tolerance value for geometry simplification simplify = forms.FloatField(required=False) srs = fields.SpatialReferenceField(required=False) def select(self): kwargs = {} data = self.cleaned_data if data['precision'] is not None: kwargs.update(precision=data['precision']) tolerance, srs, format = map(data.get, ('simplify', 'srs', 'format')) srid = getattr(srs, 'srid', None) try: has_format = self.queryset.has_format(format) except AttributeError: # Handle default GeoQuerySet. try: self.queryset = getattr(self.queryset, format)(**kwargs) except AttributeError: pass else: if has_format: kwargs.update(format=format) self.queryset = self.queryset.simplify(tolerance, srid, **kwargs)
class EstablishmentForm(forms.ModelForm): "Validate and clean Durham's establishment data" status = forms.CharField() lat = forms.FloatField(required=False) lon = forms.FloatField(required=False) update_date = forms.DateTimeField(input_formats=DATE_FORMATS) opening_date = forms.DateTimeField(input_formats=DATE_FORMATS) class Meta: model = Establishment exclude = ('location', 'property_id') def clean_city(self): city = self.cleaned_data['city'] return city.title() def clean_status(self): status = self.cleaned_data['status'] if status == 'ACTIVE': return 'active' elif status == 'DELETED': return 'deleted' raise forms.ValidationError('Invalid status') def clean_phone(self): phone = self.cleaned_data['phone'] # Force empty phone value to empty string if phone == 'NULL': phone = '' return phone def clean(self): lat = self.cleaned_data.get('lat', None) lon = self.cleaned_data.get('lon', None) if lat and lon: self.cleaned_data['location'] = Point(lon, lat) return self.cleaned_data def save(self, commit=True): instance = super().save(commit=False) if 'location' in self.cleaned_data: instance.location = self.cleaned_data['location'] instance.save() return instance
class ColaboradorForm(forms.ModelForm): lat = forms.FloatField(required=False) lon = forms.FloatField(required=False) def clean(self): cleaned_data = super().clean() telefono = cleaned_data.get("telefono") email = cleaned_data.get("email") if not email and not telefono: raise ValidationError( "Es necesario un método de contacto: email o teléfono") def clean_lat(self): lat = self.cleaned_data['lat'] if not lat: raise ValidationError("Indica donde estás") return lat def is_valid(self): valid = super(ColaboradorForm, self).is_valid() if not valid: return valid if not self.data["email"] and not self.data["telefono"]: return False return True def save(self, commit=True): colaborador = super(ColaboradorForm, self).save(commit=False) colaborador.geom = Point(self.cleaned_data['lon'], self.cleaned_data['lat'], srid=4326) colaborador.fuente = settings.FUENTE if commit: colaborador.save() enviar_correo_nuevo_colaborador.delay() return colaborador class Meta: model = Colaborador fields = '__all__' exclude = ['geom', 'fuente']
class EntryForm(forms.Form): feedTime = forms.DateTimeField() feedType = forms.CharField(max_length=50) feedAmt = forms.FloatField() flockSize = forms.IntegerField() feedLoc = forms.PointField(widget=forms.OSMWidget( attrs={ 'map_width': 800, 'map_height': 500, 'default_lat': 48.427502, 'default_lon': -123.367264 }))
class ComercioForm(forms.ModelForm): lat = forms.FloatField(required=False) lon = forms.FloatField(required=False) def clean_lat(self): lat = self.cleaned_data['lat'] if not lat: raise ValidationError("Indica donde estás") return lat def save(self, commit=True): comercio = super(ComercioForm, self).save(commit=False) comercio.geom = Point(self.cleaned_data['lon'], self.cleaned_data['lat'], srid=4326) comercio.fuente = settings.FUENTE if commit: comercio.save() enviar_correo_nuevo_comercio.delay() return comercio class Meta: model = Comercio fields = '__all__' exclude = ['geom', 'fuente']
class Point3DFieldForm(forms.ModelForm): """Form class that allows entering a z coordinate for 3d point""" z_coord = forms.FloatField(label=_("Location (z)"), initial=0) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["location"].label = _("Location (x,y)") if self.instance.location: self.fields["z_coord"].initial = self.instance.location.z def clean(self): cleaned_data = super().clean() z_coord = cleaned_data.pop("z_coord", 0) location = cleaned_data["location"] cleaned_data["location"] = Point( location.x, location.y, z_coord, srid=settings.SRID ) return cleaned_data
class InspectionForm(forms.ModelForm): "Validate and clean Durham's inspection data" score = forms.FloatField(required=False) date = forms.DateTimeField(input_formats=DATE_FORMATS) update_date = forms.DateTimeField(input_formats=DATE_FORMATS) class Meta: model = Inspection fields = "__all__" def clean_score(self): # Force empty score value to None so we save to DB as NULL score = self.cleaned_data['score'] if not score: score = None return score def clean_description(self): # Force API sent description strings of "NULL" to empty string description = self.cleaned_data['description'] if description == 'NULL': description = '' return description
class ShopSearchForm(forms.Form): text = forms.CharField(required=False) lat = forms.FloatField(required=False) lng = forms.FloatField(required=False)