Django ManyToManyField - 插入 - ORM - admin中显示
综述
Django
ManyToManyField
的ORM
操作和在admin
中显示。
表结构设计
假设一个作者有多本书,一本书也可以有个作者,多对多关系。
1 | # 表结构设计 |
在admin中显示
当数据过多时,django
自带的ManyToManyField
及其不方便。仅需在admin.py
添加如下字段即可。
1 | # 修改前 |
使用filter_horizontal
。在作多项选择的操作方便性,及单项选择太多时,会有极好的体验。
1 | # 修改后 |
若想在admin中显示cards字段。增加如下代码即可
1 | class AuthorAdmin(admin.ModelAdmin): |
ORM操作
all 关联的所有的元组
一个作者的所有书。表Author中某一元组关联表Book中的所有元组
1 | author = models.Author.objects.get(pk=1) |
add 添加多对多关系
重复添加同一关系django
会自动忽略
1 | author = models.Author.objects.get(pk=1) |
remove 多对多关系
1 | author = models.Author.objects.get(pk=1) |
set 替换
直接完整的替换某一多对多关系
1 | author = models.Author.objects.get(pk=1) |
clear 清除
清除一元组所有多对多关系
1 | author = models.Author.objects.get(pk=1) |
一张表自关联
1 | from django.db import models |
当django处理这个模型时,它会做如此定义:对多对多字段关系被认为是对称的——即,如果我是你的朋友,那么你也是我的朋友。(跟)C++
一比,我是你的友元,你不是我的友元
然而有时候我们不需要这个友好关系,修改symmetrical
为False
即可。
1 | symmetrical=Flase |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Naylen's Blog!
评论