在Django admin中編輯ManyToManyField的實現(xiàn)方法
如何定義多對多關(guān)系
Django 本身自帶了一個很強大的ORM,支持自定義model并將其映射到數(shù)據(jù)庫的表中
model中可以定義各種類型的數(shù)據(jù),比較直觀的比如整形, 字符型,也可以定義外鍵 ForeignKey來指定一對多關(guān)系。
關(guān)系數(shù)據(jù)庫中有一種多對多的關(guān)系,在Django的ORM中也支持它,使用ManyToManyField.
下面使用EmailGroup和Email來展示如何使用
class EmailTo(models.Model): name = models.CharField(max_length=64) email = models.EmailField(max_length=255, unique=True, db_index=True) def __unicode__(self): return self.name class EmailGourp(models.Model): name = models.CharField(max_length=64) email_to = models.ManyToManyField(EmialTo, blank=True) def __unicode__(self): return self.name
這里就定義了EmailGroup和EmailTo是一個多對多關(guān)系,這樣在作migrate的時候就會在數(shù)據(jù)庫中多產(chǎn)生一個作Mapping的表,表名一般為emailgroup_email_to
如何編輯多對多關(guān)系
Django另一個強大的功能是可以根據(jù)model來生成admin site,并且可以對admin site進行定制。但是默認(rèn)的admin site 對這種ManytoManyField的編輯功能非常的弱小而且還有問題。
就是如果只有這樣的話
admin.site.register(EmialGourp)
那如何才能使admin site很好的支持編輯ManytoManyField呢,這樣就需要定制化admin site
首先定義EmailGroup的admin
class EmailGroupAdmin(ModelAdmin): list_display = ('name',) fieldsets = ( (None, {'fields': ('name', 'email_to')}), ) filter_horizontal = ('email_to',)
這里的重點是使用filter_horizontal
然后將EmailGroupAdmin加入到admin.site中去
admin.site.register(EmialGourp, EmailGroupAdmin)
這樣就會有一個非常有好的Admin界面來編輯ManytoManyField
以上這篇在Django admin中編輯ManyToManyField的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python?flask?框架使用flask-login?模塊的詳細過程
Flask-Login?是一個?Flask?模塊,可以為?Flask?應(yīng)用程序提供用戶登錄功能,這篇文章主要介紹了Python?flask?框架使用?flask-login?模塊,需要的朋友可以參考下2023-01-01基于python的itchat庫實現(xiàn)微信聊天機器人(推薦)
這篇文章主要介紹了基于python的itchat庫實現(xiàn)微信聊天機器人,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10