GeometryField doesn't honor "required" attribute
|Reported by:||Fidel Ramos||Owned by:||Fidel Ramos|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
The Django documentation says that every form field can be left blank or not depending on the required attribute. However, Django gis'
GeometryField doesn't honor that attribute, but uses another called null instead.
A simple example to see the problem with the current
class MyForm(forms.Form): point = GeometryField(required=False)
According to the documentation, the form should validate when the "point" field is left blank, but actually it raises
ValidationError. The offending code is in [source:/django/trunk/django/contrib/gis/forms/fields.py@8565#L31 line 31 of /django/trunk/django/contrib/gis/forms/fields.py].
I suppose (hope) that the use of null in
GeometryField was a deliberate decision made for some reason, but I think the standard behavior for form fields must be maintained.
I see two choices for fixing this:
- Introduce a backwards-incompatible change so that
GeometryFielddoesn't use null, and use required instead. I don't know if this has impact in other parts of Django.
- Allow for "null" OR "required". If null is True OR required is False then the field should be allowed to be blank. One option would be calling the parent class' (Field) clean() method. This should be backwards-compatible AFAIK.
I can submit a patch when a design decision is reached.
See also this discussion at Django-developers.