Field's `name` kwarg gets paved over
Field.set_attributes_from_name
should [source:/django/trunk/django/db/models/fields/__init__.py?rev=14069#L229 set self.name = name] only if self.name
is None
. As things stand, any name=whatever
kwarg we pass to a field on construction is obliterated by set_attributes_from_name
. This means things like…
_category = models.IntegerField(db_column='category', name='category')
…end up with a get__category_display
method (note the 2 underscores in a row) rather than a get_category_display
. I've attached a quick but functional patch that fixes this; the tests (in 1.2.3, anyway) still all pass. One possible improvement might be to use get_attname
rather than saying self.name
directly, but (1) I'm not sure what the layering intentions are in there and (2) it blew up in a hairly-looking way when I tried—so I wouldn't mind some clueful feedback about that.
FWIW, my use case is replacing my model's category
attr with a descriptor so I can do some custom stuff on get. #3148 would make this unnecessary for me, but I could see that taking awhile to land.
Change History
(10)
milestone: |
1.3
|
Needs tests: |
set
|
Patch needs improvement: |
set
|
Triage Stage: |
Unreviewed → Accepted
|
Owner: |
changed from nobody to erikrose
|
Severity: |
→ Normal
|
Type: |
→ Bug
|
Easy pickings: |
unset
|
Owner: |
changed from erikrose to Will Hardy
|
Status: |
new → assigned
|
UI/UX: |
unset
|
Keywords: |
dceu2011 added
|
Needs tests: |
unset
|
Owner: |
changed from Will Hardy to nobody
|
Patch needs improvement: |
unset
|
Status: |
assigned → new
|
Triage Stage: |
Accepted → Ready for checkin
|
Resolution: |
→ fixed
|
Status: |
new → closed
|
Patch against Django 1.2.3