django之多对多关系(二)

2015-07-24 10:44:15 · 作者: · 浏览: 10
ation.objects.all()

[, , ']

>>> a1 = Article.objects.get(pk=1)

>>> a1.publications.all()

[ ]

如果我们删除一个Article,它的Publications将不能访问它:

>>> a2.delete()

>>>Article.objects.all()

[]

>>> p2.article_set.all()

[ ]

通过m2m的另一端进行添加:

>>> a4 = Article(headline='NASA finds intelligent lif on Earth')

>>>a4.save()

>>>p2.article_set.add(a4)

>>> p2.article_set.all()

[]

>>> a4.publications.all()

[]

通过另一端使用关键字添加:

>>> new_article = p2.article_set.create(headline='Oxygen-free diet works wonders')

>>> p2.article_set.all()

[, ]

>>> a5 = p2.article_set.all()[1]

>>> a5.publications.all()

[ ]

从1个Article移除Publication:

>>> a4.publications.remove(p2)

>>> p2.article_set.all()

[]

>>> a4.publications.all()

[ ]

而从另一端:

>>> p2.article_set.remove(a5)

>>>p2.article_set.all()

[ ]

>>> a5.publications.all()

[ ]

可以赋值关系集。赋值操作清除任何存在的集合成员:

>>> a4.publications.all()

[]

>>> a4.publications = [p3]

>>> a4.publications.all()

[]

关系集可以清除:

>>> p2.article_set.clear()

>>> p2.article_set.all()

[ ]

也可以从另一端做清除:

>>> p2.article_set.add(a4, a5)

>>> p2.article_set.all()

[, ]

>>> a4.publications.clear()

>>> a4.publications.all()

[ ]

>>> p2.article_set.all()

[ ]

重新创建我们删除的Article和Publications:

>>> p1 = Publication(title='The Python Journal')

>>> p1.save()

>>> a2 = Article(headline='NASA uses Python')

>>> a2.save()

>>> a2.publications.add(p1, p2, p3)

批量删除一些Publications - 引用删除的publications也被删除:

>>> Publication.objects.filter(title__startwith='Science').delete()

>>> Publication.objects.all()

[, ]

>>> Article.objects.all()

[, .... ]

>>> a2.publications.all()

[]

批量删除一些article - 引用删除的对象也被删除:

>>> q = Article.objects.filter(headline__startwith='Django')

>>> print(q)

[]

>>> q.delete()

在delete()调用后,QeruySet缓存需要清除,而且音乐的对象也会删掉:

>>> print(q)

[ ]

>>> p1.article_set.all()

[]

调用clear()的替代方法是赋值空集:

>>> p1.article_set = []

>>> p1.article_set.all()

>>> a2.publications = [p1, new_publication]

>>> a2.publications.all()

[, ]

>>> a2.publications = [ ]

>>> a2.publications.all()

[ ]