django ORM 多对多关系

多对多关系

在model.py定义好两张表

执行迁移创建数据库

# 生成迁移文件
python manage.py makemigrations

#执行迁移文件
python manage.py migrate

添加演员和电影

添加演员和电影的关联

movie_obj = Movie.objects.filter(pk=1).first()  # 获取电影表的电影

actor_obj = Actor.objects.filter(actor_name='赵四').first()
actor_id = actor_obj.id  # 获取演员的id

movie_obj.actor.add(actor_id)  # 添加

获取电影表所关联的演员

movie_obj = Movie.objects.filter(pk=1).first()  # 获取电影表的电影

actor_list = movie_obj.actor.all()  # 获取电影表所关联的所有演员

for i in actor_list:
    print(i.actor_name)  # 循环遍历输出

反向获取演员所演过的电影

actor_obj = Actor.objects.filter(pk=1).first()  # 获取演员对象

print(actor_obj.movie_set.all())  # 获取对应的关联电影进行输出

更新电影表对应的演员

actor01_obj = Actor.objects.filter(actor_name='李二').first()
actor01_id = actor01_obj.id  # 获取演员李二的id

actor02_obj = Actor.objects.filter(actor_name='张三').first()
actor02_id = actor02_obj.id  # 获取演员张三的id

movie_obj.actor.set([actor01_id, actor02_id])  # 进行修改,!!!参数必须为列表

删除对应关系

actor01_obj = Actor.objects.filter(actor_name='李二').first()
actor01_id = actor01_obj.id  # 获取演员李二的id

actor02_obj = Actor.objects.filter(actor_name='张三').first()
actor02_id = actor02_obj.id  # 获取演员张三的id
movie_obj.actor.remove(actor01_id, actor02_id)  # 删除与演员李二和张三对对应关系
原文地址:https://www.cnblogs.com/hr20-04-19/p/13153478.html