zoukankan      html  css  js  c++  java
  • ORM之ManyToManyField操作

    ManyToManyField

    class RelatedManager

    "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。

    它存在于下面两种情况:

    1. 外键关系的反向查询
    2. 多对多关联关系

    简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法

    create()

    创建一个新的对象,保存对象,并将它添加到关联对象集之中,返回新创建的对象。

    import datetime
    models.Author.objects.first().book_set.create(title="番茄物语", publish_date=datetime.date.today())

    add()

    把指定的model对象添加到关联对象集中。

    添加对象

    author_objs = models.Author.objects.filter(id__lt=3)
    models.Book.objects.first().authors.add(*author_objs)

    添加id

    models.Book.objects.first().authors.add(*[1, 2])

    set()

    更新model对象的关联对象。

    book_obj = models.Book.objects.first()
    book_obj.authors.set([2, 3])

    remove()

    从关联对象集中移除执行的model对象

    book_obj = models.Book.objects.first()
    book_obj.authors.remove(3)

    clear()

    从关联对象集中移除一切对象。

    book_obj = models.Book.objects.first()
    book_obj.authors.clear()

    注意:

    对于ForeignKey对象,clear()和remove()方法仅在null=True时存在。

    举个例子:

    ForeignKey字段没设置null=True时,

    class Book(models.Model):
        title = models.CharField(max_length=32)
        publisher = models.ForeignKey(to=Publisher)

    没有clear()和remove()方法:

    >>> models.Publisher.objects.first().book_set.clear()
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    AttributeError: 'RelatedManager' object has no attribute 'clear'

    当ForeignKey字段设置null=True时,

    class Book(models.Model):
        name = models.CharField(max_length=32)
        publisher = models.ForeignKey(to=Class, null=True)

    此时就有clear()和remove()方法:

    >>> models.Publisher.objects.first().book_set.clear()

    注意:

    对于所有类型的关联字段,add()、create()、remove()和clear(),set()都会马上更新数据库。换句话说,在关联的任何一端,都不需要再调用save()方法。

  • 相关阅读:
    ES6新语法之---块作用域let/const(2)
    sass变量
    Ruby(或cmd中)输入命令行编译sass
    sass的安装
    鼠标滚动兼容
    HTML5新标签兼容——> <!--<if lt IE 9><!endif-->
    #include stdio.h(7)
    #include stdio.h(6)
    #include stdio.h(5)
    #include stdio.h(3)
  • 原文地址:https://www.cnblogs.com/lxfpy/p/10890045.html
Copyright © 2011-2022 走看看