Ticket #2720: constraints.diff

File constraints.diff, 3.3 KB (added by Joakim Sernbrant <serbaut@…>, 18 years ago)

I think this patch should work.

  • management.py

     
    145145    opts = model._meta
    146146    final_output = []
    147147    table_output = []
     148    references = []
    148149    pending_references = {}
    149150    for f in opts.fields:
    150151        if isinstance(f, models.ForeignKey):
     
    165166                field_output.append(style.SQL_KEYWORD('PRIMARY KEY'))
    166167            if f.rel:
    167168                if f.rel.to in known_models:
    168                     field_output.append(style.SQL_KEYWORD('REFERENCES') + ' ' + \
     169                    reference = style.SQL_KEYWORD('REFERENCES') + ' ' + \
    169170                        style.SQL_TABLE(backend.quote_name(f.rel.to._meta.db_table)) + ' (' + \
    170171                        style.SQL_FIELD(backend.quote_name(f.rel.to._meta.get_field(f.rel.field_name).column)) + ')'
    171                     )
     172                    field_output.append(reference)
     173                    references.append('FOREIGN KEY (%s) ' % style.SQL_FIELD(backend.quote_name(f.column)) + reference)
    172174                else:
    173175                    # We haven't yet created the table to which this field
    174176                    # is related, so save it for later.
     
    181183    for field_constraints in opts.unique_together:
    182184        table_output.append(style.SQL_KEYWORD('UNIQUE') + ' (%s)' % \
    183185            ", ".join([backend.quote_name(style.SQL_FIELD(opts.get_field(f).column)) for f in field_constraints]))
    184 
     186    for constraint in references:
     187        table_output.append(style.SQL_KEYWORD('CONSTRAINT') + ' ' + constraint)
    185188    full_statement = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + style.SQL_TABLE(backend.quote_name(opts.db_table)) + ' (']
    186189    for i, line in enumerate(table_output): # Combine and add commas.
    187190        full_statement.append('    %s%s' % (line, i < len(table_output)-1 and ',' or ''))
     
    244247                style.SQL_KEYWORD('NOT NULL REFERENCES'),
    245248                style.SQL_TABLE(backend.quote_name(f.rel.to._meta.db_table)),
    246249                style.SQL_FIELD(backend.quote_name(f.rel.to._meta.pk.column))))
    247             table_output.append('    %s (%s, %s)' % \
     250            table_output.append('    %s (%s, %s),' % \
    248251                (style.SQL_KEYWORD('UNIQUE'),
    249252                style.SQL_FIELD(backend.quote_name(f.m2m_column_name())),
    250253                style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name()))))
     254            table_output.append('    %s (%s) %s %s (%s),' % \
     255                (style.SQL_KEYWORD('CONSTRAINT FOREIGN KEY'),
     256                 style.SQL_FIELD(backend.quote_name(f.m2m_column_name())),
     257                style.SQL_KEYWORD('REFERENCES'),
     258                style.SQL_TABLE(backend.quote_name(opts.db_table)),
     259                style.SQL_FIELD(backend.quote_name(opts.pk.column))))
     260            table_output.append('    %s (%s) %s %s (%s)' % \
     261                (style.SQL_KEYWORD('CONSTRAINT FOREIGN KEY'),
     262                style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name())),
     263                style.SQL_KEYWORD('REFERENCES'),
     264                style.SQL_TABLE(backend.quote_name(f.rel.to._meta.db_table)),
     265                style.SQL_FIELD(backend.quote_name(f.rel.to._meta.pk.column))))
    251266            table_output.append(');')
    252267            final_output.append('\n'.join(table_output))
    253268    return final_output
Back to Top