(轉載)獲取Django中model欄位名 欄位的verbose_name
阿新 • • 發佈:2019-02-12
以下正文
obj._meta.fields 為關鍵 obj為model類
可輸出類似的一個元組,包含所有欄位名稱:
(<django.db.models.fields.AutoField: id>, <django.db.models.fields.DateTimeField: created>, <django.db.models.fields.DateTimeField: modified>, <django.db.models.fields.DateTimeField: last_seen>, <django.db.models .fields.related.OneToOneField: ethernet>, <django.db.models.fields.related.ForeignKey: network>, <django.db.models.fields.GenericIPAddressField: address>, <ralph.lib.mixins.fields.NullableCharField: hostname>,
...)
使用以下函式獲取自定義名稱 verbose_name
from django.apps import apps
def getmodelfield(appname,modelname,exclude):
"""
獲取model的verbose_name和name的欄位
"""
modelobj = apps.get_model(appname, modelname)
filed = modelobj._meta.fields
print(filed)
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
exclude = ['username','email','is_staff','last_login','password','last_name','date_joined','is_active','is_superuser']
cs = getmodelfield('users', 'UserProfile',exclude)
#輸出結果為:
{'active': 'active', 'registration_number': '工商註冊號', 'contact_person': '聯絡人', 'company_person': '單位法人', 'education': '學歷', 'gender': 'gender', 'id': 'ID', 'address': '地址', 'first_name': <django.utils.functional.lazy.<locals>.__proxy__ object at 0x7fe70c6a77b8>, 'title': '職稱', 'company_type': '單位型別', 'introduction': '簡介', 'project_role': '專案角色', 'gcp': 'gcp', 'department': '部門', 'realname': '姓名', 'company': '單位', 'mobile': '電話'}
定義model型別
class UserMessage(models.Model):
"""
使用者資訊表
"""
user = models.ForeignKey(User,verbose_name='使用者名稱')
study_number = models.IntegerField(default='', verbose_name='研究編號')
study_name = models.CharField(max_length=50, default='',verbose_name='研究名稱')
study_disease = models.CharField(max_length=20, default='',verbose_name='研究疾病')
study_medicine = models.CharField(max_length=25, default='',verbose_name='研究藥物/器械')
responsible_person = models.CharField(max_length=10, default='',verbose_name='負責人')
start_time = models.DateField(null=True,blank=True, verbose_name='開始時間')
end_time = models.DateField(null=True,blank=True, verbose_name='建立時間')
article = models.CharField(max_length=20, default='', verbose_name='文章發表情況')
influence = models.CharField(max_length=20, default='', verbose_name='影響因子')
funds = models.CharField(max_length=30, default='', verbose_name='經費來源')
pay = models.CharField(max_length=100,default='', verbose_name='費用')
util = models.CharField(max_length=5, default='', verbose_name='單位')
add_time = models.DateField(auto_now_add=True, verbose_name='新增時間')
填寫View檢視,輸出model的name以及verbose_name
exclude_fields = ('user', 'add_time')
params = [f for f in UserMessage._meta.fields if f.name not in exclude_fields]
print (params)
for msg in params:
print(msg.name,msg.verbose_name)
輸出為:
id ID
study_number 研究編號
study_name 研究名稱
study_disease 研究疾病
study_medicine 研究藥物/器械
responsible_person 負責人
start_time 開始時間
end_time 建立時間
article 文章發表情況
influence 影響因子
funds 經費來源
pay 費用
util 單位