orm多对多操作

一. 新建model

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100, verbose_name='文章标题')

    class Meta:
        db_table = 'article'
        verbose_name = '文章'

# 因为在博客项目中, 每个用户都是作者, 所以这里用author来表示用户
class Author(models.Model):
    username = models.CharField(max_length=30, verbose_name='用户名')
    articles_collected = models.ManyToManyField(to=Article, verbose_name='收藏的文章')

    class Meta:
        db_table = 'author'
        verbose_name = '作者'

迁移完成后,会生成三张表。 可以看到作者模型类中定义的articles_collected字段并没有出现在作者表中, 而是自动生成了一张表名为模型类名小写_关联字段的表, 其中存储了两个模型的id

二. 使用orm进行多对多增删改查

1.添加关联关系

# 创建一个用户
author = Author.objects.create(username='张三')
# 创建两篇文章
article1 = Article.objects.create(title='小红帽')
article2 = Article.objects.create(title='大灰狼')

# 对象.关联字段.add()方法用来添加关联关系
author.articles_collected.add(1)  # 可以是文章的id
author.articles_collected.add(article2) # 也可以是对应的文章对象

2.通过关联字段articles_collected查询所有关联对象

对象.关联字段.all()用来查询所有关联的对象。

>>>author.articles_collected.all()
<QuerySet [<Article: Article object (1)>, <Article: Article object (2)>]>

3.移除关联关系

对象.关联字段.remove()用来移除关联关系, 和add()一样也是可以使用id或者对象作为参数

author.articles_collected.remove(1)
author.articles_collected.remove(article2)
#执行完后重新查询一下, 用户收藏的文章, 可以看到收藏的两篇文章都已经移除了
>>> author.articles_collected.all()            
<QuerySet []>

4.更新关联关系

对象.关联字段.set()可用来执行添加,修改,清空操作,接收一个列表作为参数,列表中可以是文章对象,也可以是文章id

#修改关联关系,使只有文章id=2
author.articles_collected.set([2])
>>> author.articles_collected.all()    
<QuerySet [<Article: Article object (2)>]>

#修改内容为空,参数为空列表时,则清空关联关系
author.articles_collected.set([])
>>> author.articles_collected.all()            
<QuerySet []>

#添加关联关系
author.articles_collected.set([article1,2])
>>> author.articles_collected.all()             
<QuerySet [<Article: Article object (1)>, <Article: Article object (2)>]>

参考:https://blog.csdn.net/qq_45458749/article/details/125035096

posted @ 2022-10-26 10:34  坚强的小蚂蚁  阅读(67)  评论(0编辑  收藏  举报