SmallIntegerField
在 MySQL 中是smallint
(最大有符号值32767
,显示宽度)。6
我想你想要tinyint
(最大有符号值127
,显示宽度3
)在 MySQL 中。
class TinyAutoField(models.SmallAutoField):
def db_type(self, connection):
if connection.vendor == 'mysql':
return 'tinyint AUTO_INCREMENT'
return super().db_type(connection)
def rel_db_type(self, connection):
if connection.vendor == 'mysql':
return 'tinyint'
return super().db_type(connection)
用法:
class tblroles(models.Model):
# role_id = SmallIntegerField(primary_key=True, verbose_name="role_id") # Change this
role_id = TinyAutoField(primary_key=True, verbose_name="role_id") # to this
# ...
但是如果你想要 MySQL 中的文字int(3)
(最大有符号值2147483647
,显示宽度3
)。
class AutoField(models.AutoField):
def __init__(self, *args, **kwargs):
self.display_width = kwargs.pop('display_width', None)
super().__init__(*args, **kwargs)
def db_type(self, connection):
if connection.vendor == 'mysql' and self.display_width:
return 'int(%s) AUTO_INCREMENT' % self.display_width
return super().db_type(connection)
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
if self.display_width:
kwargs['display_width'] = self.display_width
return name, path, args, kwargs
用法:
class tblroles(models.Model):
# role_id = SmallIntegerField(primary_key=True, verbose_name="role_id")
role_id = AutoField(primary_key=True, verbose_name="role_id", display_width=3)