在平時(shí)的開發(fā)過程中蜒程,避免不了需要獲取 Model 中的字段列表。
那需要把所有字段都再復(fù)制一份嗎鹦牛?這樣的話就太麻煩了搞糕,而且后期也不好維護(hù)。
其實(shí)曼追,Django 內(nèi)置了一個(gè)方法窍仰,可以很輕松解決這個(gè)問題。
下面以 User 表舉一個(gè)例子礼殊。
>>> from django.contrib.auth.models import User
>>> User._meta.get_fields()
(<ManyToOneRel: admin.logentry>, <django.db.models.fields.AutoField: id>, <django.db.models.fields.CharField: password>, <django.db.models.fields.DateTimeField: last_login>, <django.db.models.fields.BooleanField: is_superuser>, <django.db.models.fields.CharField: username>, <django.db.models.fields.CharField: first_name>, <django.db.models.fields.CharField: last_name>, <django.db.models.fields.EmailField: email>, <django.db.models.fields.BooleanField: is_staff>, <django.db.models.fields.BooleanField: is_active>, <django.db.models.fields.DateTimeField: date_joined>, <django.db.models.fields.related.ManyToManyField: groups>, <django.db.models.fields.related.ManyToManyField: user_permissions>)
通過 get_fields()
方法會(huì)返回一個(gè) tuple驹吮,每個(gè)元素都是 model field 類型。
這個(gè)結(jié)果并不是我們想要的晶伦,我們需要的是字段名稱列表碟狞。只需要對(duì)每個(gè) field 字段取 name 屬性就可以了。
>>> [field.name for field in User._meta.get_fields()]
['logentry', 'id', 'password', 'last_login', 'is_superuser', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active', 'date_joined', 'groups', 'user_permissions']
這樣就可以了婚陪。
接下來族沃,我們將其抽象出一個(gè)函數(shù),這樣如果有需要直接調(diào)用就可以了泌参。
def get_model_fields(model):
fields = [field.name for field in model._meta.get_fields()]
return fields
以上就是本文的全部內(nèi)容脆淹,如果覺得還不錯(cuò)的話,歡迎點(diǎn)贊沽一,轉(zhuǎn)發(fā)和關(guān)注盖溺,感謝支持。
推薦閱讀:
- 計(jì)算機(jī)經(jīng)典書籍
- 技術(shù)博客: 硬核后端開發(fā)技術(shù)干貨铣缠,內(nèi)容包括 Python烘嘱、Django、Docker蝗蛙、Go蝇庭、Redis、ElasticSearch捡硅、Kafka哮内、Linux 等。
- Go 程序員: Go 學(xué)習(xí)路線圖病曾,包括基礎(chǔ)專欄牍蜂,進(jìn)階專欄漾根,源碼閱讀,實(shí)戰(zhàn)開發(fā)鲫竞,面試刷題辐怕,必讀書單等一系列資源。
- 面試題匯總: 包括 Python从绘、Go寄疏、Redis、MySQL僵井、Kafka陕截、數(shù)據(jù)結(jié)構(gòu)、算法批什、編程农曲、網(wǎng)絡(luò)等各種常考題驻债。