#10872 closed (fixed)
Support of 'list_editable' in admin when using GeoDjango geometry fields
Reported by: | springmeyer | Owned by: | nobody |
---|---|---|---|
Component: | GIS | Version: | dev |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
The post data sent from a GeoDjango geometry field currently fails when 'list_editable' is used in the Django Admin (when using the GeoDjango OSMGeoAdmin)
The problem occurs for two small reasons:
1) Because the geometry field is a textarea whose name is contructed from {{ field }} rather than {{ id }} the post data does not get prepended with the 'form-row' information.
2) Because (I think) the geometry widget textarea is hidden the geometry field {{ id }} is prefixed with 'id_' unlike other fields I've noticed.
So, any easy fix for #1 is to use {{ id }} instead of {{ field }} like:
Index: django/contrib/gis/templates/gis/admin/openlayers.html =================================================================== --- django/contrib/gis/templates/gis/admin/openlayers.html (revision 10604) +++ django/contrib/gis/templates/gis/admin/openlayers.html (working copy) @@ -32,6 +32,6 @@ <div id="{{ id }}_map"{% if LANGUAGE_BIDI %} dir="ltr"{% endif %}></div> <a href="javascript:{{ module }}.clearFeatures()">Delete all Features</a> {% if display_wkt %}<p> WKT debugging window:</p>{% endif %} -<textarea id="{{ id }}" class="vWKTField required" cols="150" rows="10" name="{{ field_name }}">{{ wkt }}</textarea> +<textarea id="{{ id }}" class="vWKTField required" cols="150" rows="10" name="{{ id }}">{{ wkt }}</textarea> <script type="text/javascript">{% block init_function %}{{ module }}.init();{% endblock %}</script> </span>
But that raises/creates issue #2 which effectively breaks the successful posting of data in both the list_editable changelist view and on the normal record view page (due to the 'id_' prefixing).
I've been looking through the commit (r10077) and the django forms trying to track down how and where and why this 'id_' gets prefixed. I can't quite suss out where it is happening well enough to feel like I know the right place to tackle this.
So, my best fix at this point is to strip the 'id_' off of the field id inside the geodjango form widget. The attached patch does that in a way to gets the list_editable working and still works great with the normal record edit/view page. So, a classic 'this patch works (seemingly) perfectly, but sucks : )
I'm concerned about some solution to this because I anticipate that once users running 1.1 discover this 'list_editable' feature I'm sure many using GeoDjango folks will want to try it out and will hit this.
Attachments (2)
Change History (6)
by , 16 years ago
Attachment: | geodjango_widget_list_editable_support.patch added |
---|
comment:1 by , 16 years ago
Patch needs improvement: | set |
---|---|
Triage Stage: | Unreviewed → Accepted |
by , 16 years ago
Attachment: | geodjango_widget_list_editable_support2.patch added |
---|
New patch to solve problem more cleanly using the widget attr 'name'
comment:2 by , 16 years ago
Alex wisely caught the deeper issue here that we should be using 'name' instead of 'field' from the attr's for the unique field name. Doing so, along with using 'name' for the namespacing of each map's javascript gets things working nicely and more cleanly for both the changelist view and the record view.
New patch attached. Didn't need to alter the openlayers.js at all (therefore left the reference to {{ field }} in that file - we can clean that up whenever).
Thanks Alex,
-dane
comment:3 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Hack to get geodjango admin map widget working with post data