#33372 closed Bug (invalid)
GISModelAdmin.gis_widget_kwargs cannot be used due to signature mismatch.
| Reported by: | Nick Pope | Owned by: | Alexander Filimonov |
|---|---|---|---|
| Component: | GIS | Version: | 4.0 |
| Severity: | Normal | Keywords: | gismodeladmin, gis_widget_kwargs |
| Cc: | Claude Paroz | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | yes | UI/UX: | no |
Description
This issue was raised in https://github.com/django/django/pull/15207.
The problem is that the gis_widget_kwargs attribute of GeoModelAdminMixin is **-unpacked into gis_widget which is OSMWidget by default.
OSMWidget and BaseGeometryWidget have .__init__(self, attrs=None), not .__init__(self, **kwargs), so this is broken.
Marking as a release blocker as this is a bug in a new feature introduced in 4.0.
Change History (9)
comment:1 by , 4 years ago
| Easy pickings: | set |
|---|---|
| Has patch: | set |
| Needs tests: | set |
| Patch needs improvement: | set |
comment:2 by , 4 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
follow-up: 4 comment:3 by , 4 years ago
| Cc: | added |
|---|---|
| Has patch: | unset |
| Needs tests: | unset |
| Patch needs improvement: | unset |
| Resolution: | → invalid |
| Severity: | Release blocker → Normal |
| Status: | assigned → closed |
follow-ups: 5 6 comment:4 by , 4 years ago
Replying to Mariusz Felisiak:
I wouldn't say it's broken, you can set
gis_widget_kwargs = {'attrs': {...}}. Defining widgets with more thanattrsor a different signature is reasonable (e.g.SplitDateTimeWidgetorChoiceWidget). IMO we should leave wide support for all options.
I see. That makes sense, but I can also see that it is confusing.
Perhaps the documentation can be updated with an example? (If only to avoid reports of this in the future.)
In addition, this is not tested - it should be to ensure that gis_widget_kwargs continues to work as expected.
comment:5 by , 4 years ago
Replying to Nick Pope:
Perhaps the documentation can be updated with an example? (If only to avoid reports of this in the future.)
Sounds reasonable. Maybe a short example with changing default_lon and default_lat.
In addition, this is not tested - it should be to ensure that
gis_widget_kwargscontinues to work as expected.
Extra tests coverage is always warm welcome.
comment:6 by , 4 years ago
Replying to Nick Pope:
Replying to Mariusz Felisiak:
I wouldn't say it's broken, you can set
gis_widget_kwargs = {'attrs': {...}}. Defining widgets with more thanattrsor a different signature is reasonable (e.g.SplitDateTimeWidgetorChoiceWidget). IMO we should leave wide support for all options.
I see. That makes sense, but I can also see that it is confusing.
Perhaps the documentation can be updated with an example? (If only to avoid reports of this in the future.)
In addition, this is not tested - it should be to ensure thatgis_widget_kwargscontinues to work as expected.
I'd support Nick here and say that it is not a good way to use a dictionary to fill a single attribute.
I have a fix for this with a test to check if arguments are passed correctly
https://github.com/django/django/pull/15211
Please review the pull request
comment:7 by , 4 years ago
I'd support Nick here and say that it is not a good way to use a dictionary to fill a single attribute.
As far as I'm aware Nick agreed that the current implementation makes sense. Of course, it's worth adding test coverage and a short example in docs.
comment:8 by , 4 years ago
| Resolution: | invalid |
|---|---|
| Status: | closed → new |
Please have a look at the pr - little fix will make it more obvious :-)
comment:9 by , 4 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
Please don't reopen closed ticket. The fix is not backward compatible and it introduces unnecessary limitation.
Replying to Nick Pope:
I wouldn't say it's broken, you can set
gis_widget_kwargs = {'attrs': {...}}. Defining widgets with more thanattrsor a different signature is reasonable (e.g.SplitDateTimeWidgetorChoiceWidget). IMO we should leave wide support for all options.