如何在Django 2.0模型类中为MySQL字段添加COMMENT注释?
问题:如何给Django 2.0的Host模型字段添加MySQL注释?
先梳理下你的现状:
原Host模型代码:
class Host(models.Model): host_id=models.CharField(max_length=20,primary_key=True) host_label=models.CharField(verbose_name="linux_host_label",max_length=255)
对应的数据库表结构(无字段注释):
mysql> show create table dashboard_host; | dashboard_host | CREATE TABLE `dashboard_host` ( `host_id` varchar(20) NOT NULL, `host_label` varchar(255) NOT NULL, PRIMARY KEY (`host_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
你期望的目标表结构(带COMMENT注释):
mysql> show create table dashboard_host; | dashboard_host | CREATE TABLE `dashboard_host` ( `host_id` varchar(20) NOT NULL COMMENT '主机id', `host_label` varchar(255) NOT NULL COMMENT '主机标签', PRIMARY KEY (`host_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
解决方案(适配Django 2.0)
因为Django 2.2才正式引入db_comment参数直接设置数据库字段注释,针对2.0版本,给你两种实用的实现方式:
方法一:利用verbose_name同步注释(无需第三方库)
在Django 2.0的MySQL后端中,默认会把字段的verbose_name值同步为数据库字段的COMMENT注释。你只需要修改模型字段的verbose_name为目标注释内容即可:
修改后的模型代码:
class Host(models.Model): host_id=models.CharField(max_length=20,primary_key=True, verbose_name='主机id') host_label=models.CharField(verbose_name="主机标签",max_length=255)
接着执行迁移命令更新数据库:
python manage.py makemigrations python manage.py migrate
执行完成后,MySQL表字段就会带上对应的COMMENT注释了。
方法二:使用django-mysql扩展(分离界面显示与数据库注释)
如果你的verbose_name需要用于Admin界面显示,不想和数据库注释混淆,可以用django-mysql这个MySQL专属的Django扩展,它在Django 2.0中也支持直接设置db_comment参数:
- 先安装扩展:
pip install django-mysql
- 修改模型代码,使用扩展提供的
CommentCharField字段:
from django.db import models from django_mysql.models import CommentCharField class Host(models.Model): host_id=CommentCharField(max_length=20,primary_key=True, db_comment='主机id') # verbose_name用于Admin界面显示,db_comment用于数据库注释 host_label=CommentCharField(verbose_name="主机标签(Admin显示用)",max_length=255, db_comment='主机标签')
- 同样执行迁移命令更新数据库:
python manage.py makemigrations python manage.py migrate
这样就能实现Admin显示名称和数据库注释分离的需求。
内容的提问来源于stack exchange,提问作者chenjun
相关产品推荐
相关产品推荐

