获取Django中的model的字段名和字段的verbose_name
# 主要是obj._meta.fields 获取模型字段的对象
params = [f for f in ModelClass._meta.fields]
msg_list = [(msg.name, msg.verbose_name) for msg in params]
# 示例 model.py
class UserModel(models.Model):
nickname = models.CharField(max_length=24, unique=True, verbose_name='用户名')
u_name = models.CharField(max_length=12, null=True, default='', verbose_name='真实姓名')
u_room = models.CharField(max_length=24, null=True, default='', verbose_name='科室')
u_password = models.CharField(max_length=128, verbose_name='密码')
u_email = models.CharField(max_length=36, null=True, default='', verbose_name='邮箱')
u_tel = models.CharField(max_length=12, null=True, default='', verbose_name='电话')
u_token = models.CharField(max_length=128, null=True, default='', verbose_name='单终端登录')
class Meta:
db_table = 'user'
# test.py
import os
import sys
import django
sys.path.append(os.path.dirname(os.path.abspath(__file__))) # 填写项目路径
os.environ.update({"DJANGO_SETTINGS_MODULE": "CDSS.settings"})
django.setup()
from User.models import UserModel
params = [f for f in UserModel._meta.fields]
msg_list = [(msg.name, msg.verbose_name) for msg in params]
for i in msg_list:
print(i)
# 打印结果
"""
('id', 'ID')
('nickname', '用户名')
('u_name', '真实姓名')
('u_room', '科室')
('u_password', '密码')
('u_email', '邮箱')
('u_tel', '电话')
('u_token', '单终端登录')
"""
from django.apps import apps
def ge_tmodel_field(appname, modelname, exclude):
"""
获取model的verbose_name和name的字段, exclude 过滤掉的字段
"""
model_obj = apps.get_model(appname, modelname)
filed = model_obj._meta.fields
fielddic = {}
params = [f for f in filed if f.name not in exclude]
for i in params:
fielddic[i.name] = i.verbose_name
return fielddic
# 示例
filed_dict = ge_tmodel_field('User', 'UserModel', exclude=[])
print(filed_dict)
# 打印结果
'"""
{'id': 'ID', 'u_name': '真实姓名', 'u_tel': '电话', 'u_email': '邮箱',
'u_token': '单终端登录', 'u_password': '密码', 'u_room': '科室',
'nickname': '用户名'}
"""
这个功能主要用在数据导出,需要知道数据库中某个表字段和字段的含义。