Opened 10 years ago
Closed 10 years ago
#24908 closed Bug (fixed)
Overridden field in modelform used in modeladmin which name is returned by get_readonly_fields
| Reported by: | James Pic | Owned by: | |
|---|---|---|---|
| Component: | contrib.admin | Version: | 1.8 | 
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description
A Model ForeignKey field will appear twice in the admin if the following conditions are met:
- its ModelAdmin uses a custom ModelForm,
- the ModelForm overrides that field,
- its ModelAdmin.get_readonly_fields returns that field in edit mode.
Example:
https://github.com/jpic/double_readonly_field/raw/master/demo.png
Test project reproducing this issue:
Related:
Change History (9)
comment:1 by , 10 years ago
| Triage Stage: | Unreviewed → Accepted | 
|---|---|
| Version: | → 1.8 | 
comment:2 by , 10 years ago
comment:3 by , 10 years ago
| Owner: | changed from to | 
|---|---|
| Status: | new → assigned | 
Looks like this is happening because ModelFormMetaclass.__new__ doesn't expect the form class's declared fields to also be in its exclude opts. Normally, that would be a reasonable assumption. (Why would you exclude a field you've bothered to explicitly deeclared?) But in this case, it's the admin which is excluding the field, so the assumption breaks. Patch coming.
comment:4 by , 10 years ago
| Owner: | removed | 
|---|---|
| Status: | assigned → new | 
Oops, just realized there's already a PR for this. Ignore me.
comment:5 by , 10 years ago
Probably because I forgot to assign the task, my bad, lesson learned: do not sprint too much during a sprint !
This new PR fixes the bug inside ModelAdmin: https://github.com/django/django/pull/4822
comment:6 by , 10 years ago
Closed PR #4822 in favor of #4824: https://github.com/django/django/pull/4824
It's the same but rebased on master.
If there's any better way to solve this please let me know.
comment:7 by , 10 years ago
| Has patch: | set | 
|---|
comment:8 by , 10 years ago
| Triage Stage: | Accepted → Ready for checkin | 
|---|
This is fixed by : https://github.com/django/django/pull/4747/
Ready for review and probably for merge, since it's really trivial.