Opened 13 years ago

Closed 13 years ago

#14695 closed Bug (fixed)

Field's `name` kwarg gets paved over

Reported by: erikrose Owned by: nobody
Component: Database layer (models, ORM) Version: 1.2
Severity: Normal Keywords: dceu2011
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

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.

Attachments (2)

field_name.diff (782 bytes ) - added by erikrose 13 years ago.
Patch against Django 1.2.3
ticket14695.patch (2.6 KB ) - added by Will Hardy 13 years ago.
Adding tests

Download all attachments as: .zip

Change History (10)

by erikrose, 13 years ago

Attachment: field_name.diff added

Patch against Django 1.2.3

comment:1 by erikrose, 13 years ago

Here's a proper link to the line that does the paving over: source:/django/trunk/django/db/models/fields/__init__.py@14069#L229.

comment:2 by Russell Keith-Magee, 13 years ago

milestone: 1.3
Needs tests: set
Patch needs improvement: set
Triage Stage: UnreviewedAccepted

comment:3 by erikrose, 13 years ago

Owner: changed from nobody to erikrose

comment:4 by James Addison, 13 years ago

Severity: Normal
Type: Bug

comment:5 by Will Hardy, 13 years ago

Easy pickings: unset
Owner: changed from erikrose to Will Hardy
Status: newassigned
UI/UX: unset

by Will Hardy, 13 years ago

Attachment: ticket14695.patch added

Adding tests

comment:6 by Will Hardy, 13 years ago

Keywords: dceu2011 added
Needs tests: unset
Owner: changed from Will Hardy to nobody
Patch needs improvement: unset
Status: assignednew

comment:7 by Jonas Obrist, 13 years ago

Triage Stage: AcceptedReady for checkin

comment:8 by Jannis Leidel, 13 years ago

Resolution: fixed
Status: newclosed

In [16614]:

(The changeset message doesn't reference this ticket)

Note: See TracTickets for help on using tickets.
Back to Top