From 77c949289e8cc93df47997c44b8710217996cf63 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 16 Aug 2008 05:03:40 +0000 Subject: [PATCH] Fixed #7285: Improved inspectdb handling of dashes in table and field names. Thanks to redalastor@gmail.com for the report and Justin Bronn for the first part of a fix. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8404 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/management/commands/inspectdb.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/django/core/management/commands/inspectdb.py b/django/core/management/commands/inspectdb.py index d0c298366a..6e84ed64de 100644 --- a/django/core/management/commands/inspectdb.py +++ b/django/core/management/commands/inspectdb.py @@ -16,7 +16,7 @@ class Command(NoArgsCommand): from django.db import connection import keyword - table2model = lambda table_name: table_name.title().replace('_', '').replace(' ', '') + table2model = lambda table_name: table_name.title().replace('_', '').replace(' ', '').replace('-', '') cursor = connection.cursor() yield "# This is an auto-generated Django model module." @@ -45,12 +45,19 @@ class Command(NoArgsCommand): comment_notes = [] # Holds Field notes, to be displayed in a Python comment. extra_params = {} # Holds Field parameters such as 'db_column'. + # If we need to do field name modifiations, + # remember the original field name + if ' ' in att_name or '-' in att_name or keyword.iskeyword(att_name): + extra_params['db_column'] = att_name + + # Now modify the field name to make it python compatible. if ' ' in att_name: - extra_params['db_column'] = att_name - att_name = att_name.replace(' ', '') + att_name = att_name.replace(' ', '_') comment_notes.append('Field renamed to remove spaces.') + if '-' in att_name: + att_name = att_name.replace('-', '_') + comment_notes.append('Field renamed to remove dashes.') if keyword.iskeyword(att_name): - extra_params['db_column'] = att_name att_name += '_field' comment_notes.append('Field renamed because it was a Python reserved word.')