Ticket #8316: db-mysqltypeissue.diff

File db-mysqltypeissue.diff, 3.4 KB (added by julianb, 7 years ago)

ForeignKey that points to an AutoField now becomes KeyField

  • django/db/backends/mysql/creation.py

     
    1919        'FloatField':        'double precision',
    2020        'IntegerField':      'integer',
    2121        'IPAddressField':    'char(15)',
     22        'KeyField':          'integer',
    2223        'NullBooleanField':  'bool',
    2324        'OneToOneField':     'integer',
    2425        'PhoneNumberField':  'varchar(20)',
  • django/db/backends/oracle/creation.py

     
    2828        'FloatField':                   'DOUBLE PRECISION',
    2929        'IntegerField':                 'NUMBER(11)',
    3030        'IPAddressField':               'VARCHAR2(15)',
     31        'KeyField':                     'NUMBER(11)',
    3132        'NullBooleanField':             'NUMBER(1) CHECK ((%(qn_column)s IN (0,1)) OR (%(qn_column)s IS NULL))',
    3233        'OneToOneField':                'NUMBER(11)',
    3334        'PhoneNumberField':             'VARCHAR2(20)',
  • django/db/backends/postgresql/creation.py

     
    1919        'FloatField':        'double precision',
    2020        'IntegerField':      'integer',
    2121        'IPAddressField':    'inet',
     22        'KeyField':          'integer',
    2223        'NullBooleanField':  'boolean',
    2324        'OneToOneField':     'integer',
    2425        'PhoneNumberField':  'varchar(20)',
  • django/db/backends/sqlite3/creation.py

     
    2020        'FloatField':                   'real',
    2121        'IntegerField':                 'integer',
    2222        'IPAddressField':               'char(15)',
     23        'KeyField':                     'integer',
    2324        'NullBooleanField':             'bool',
    2425        'OneToOneField':                'integer',
    2526        'PhoneNumberField':             'varchar(20)',
  • django/db/models/fields/related.py

     
    710710    def db_type(self):
    711711        # The database column type of a ForeignKey is the column type
    712712        # of the field to which it points. An exception is if the ForeignKey
    713         # points to an AutoField/PositiveIntegerField/PositiveSmallIntegerField,
    714         # in which case the column type is simply that of an IntegerField.
     713        # points to an AutoField, in which case the column type is simply that
     714        # of a KeyField.
    715715        rel_field = self.rel.get_related_field()
    716         if isinstance(rel_field, (AutoField, PositiveIntegerField, PositiveSmallIntegerField)):
    717             return IntegerField().db_type()
     716        if isinstance(rel_field, AutoField):
     717            return KeyField().db_type()
    718718        return rel_field.db_type()
    719719
    720720class OneToOneField(ForeignKey):
Back to Top