您好,登錄后才能下訂單哦!
如何定義多對多關系
Django 本身自帶了一個很強大的ORM,支持自定義model并將其映射到數據庫的表中
model中可以定義各種類型的數據,比較直觀的比如整形, 字符型,也可以定義外鍵 ForeignKey來指定一對多關系。
關系數據庫中有一種多對多的關系,在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是一個多對多關系,這樣在作migrate的時候就會在數據庫中多產生一個作Mapping的表,表名一般為emailgroup_email_to
如何編輯多對多關系
Django另一個強大的功能是可以根據model來生成admin site,并且可以對admin site進行定制。但是默認的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的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。