django 指定表编码, 生成表comment , 生成表字段默认值

找到xxxx\django\db\backends\base\schema.py 编辑

表指定utf8mb4编码

def table_sql(self, model):
	# ....
	# 表指定btf8mb4编码, 加上下面这一行
	sql += ' default charset=utf8mb4 COLLATE utf8mb4_general_ci'
	return sql, params

字段生成comment

def column_sql(self, model, field, include_default=False):
	# ...
	 # 增加针对mysql注释的处理, 使用help_text
    if self.connection.client.executable_name == 'mysql' and field.help_text:
        sql += " COMMENT '%s'" % field.help_text

    # Return the sql
    return sql, params

字段默认值

def column_sql(self, model, field, include_default=False):
	# ...
	# 注释这一行, 调用的地方没有传值,永远为false
	# include_default = include_default and not self.skip_default(field)
	# 设置数据默认值
	include_default = False if sql in ['longtext', 'longblob', 'json'] or self.connection.client.executable_name != 'mysql' else True
	if include_default:
		default_value = self.effective_default(field)
		column_default = ' DEFAULT ' + self._column_default_sql(field)
		if default_value is not None:
			# 针对auto_now_add和auto_now的设置默认值为current_timestamp(6)
			if self.connection.client.executable_name == 'mysql' and (getattr(field, 'auto_now', False) or getattr(field, 'auto_now_add', False)):
				sql += column_default % 'current_timestamp(6)'
			elif self.connection.features.requires_literal_defaults:
				# Some databases can't take defaults as a parameter (oracle)
				# If this is the case, the individual schema backend should
				# implement prepare_default
				sql += column_default % self.prepare_default(default_value)
			else:
				sql += column_default
				params += [default_value]
	# ...
posted @ 2020-12-29 15:20  尘山海  阅读(352)  评论(0)    收藏  举报