inspectdb generates invalid field name for tables that start with a number
|Reported by:||Gandalfar||Owned by:||nobody|
|Component:||Core (Management commands)||Version:||master|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||yes||Patch needs improvement:||no|
Ticket #16536 introduces patch that fixes this for fields that are numbers. It turns out that some people start their table names with numbers (e.g.: '3starost') and Django doesn't like that.
This patch extends current functionality by making sure that first character of table isn't a digit:
--- a/django/core/management/commands/inspectdb.py +++ b/django/core/management/commands/inspectdb.py @@ -101,8 +101,8 @@ class Command(NoArgsCommand): att_name += '_field' comment_notes.append('Field renamed because it was a Python reserved word.') - if att_name.isdigit(): - att_name = 'number_%d' % int(att_name) + if att_name.isdigit(): + att_name = 'number_%s' % att_name extra_params['db_column'] = unicode(column_name) comment_notes.append("Field renamed because it wasn't a " "valid Python identifier.")
Original patch didn't have a test and I'm not sure how actually test this within Django framework, but I'm happy to write one I someone can give me hint where to start, if it's required.
Change History (3)
comment:1 Changed 5 years ago by
|Patch needs improvement:||unset|
|Triage Stage:||Unreviewed → Accepted|