假定两个模型:
Author Book
一个Author可以写多本Book。一个Book可以由多个Author一起写。所以他们是多对多模型。
在命令行中进行测试:
创建Author和Book模型:
from django.db import models
# Create your models here.
class Author(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class Book(models.Model):
name = models.CharField(max_length=30)
authors = models.ManyToManyField(Author)
def __unicode__(self):
return self.name
建立Book与Author的多对多模型,在命令行中测试:
b1 = Book()
b1.name = 'book1'
b1.save()
添加一本书
max = Author.objects.get(name__exact='max')
b1.authors.add(max) 为book添加第一个作者
b1.authors.add(authors[1])
此时b1就有两个作者了
可以查查看:b1.authors.all()
b1.authors.remove(max) 可以直接删除里面的作者
b1.authors.filter(name_exact=)过滤查询
max.book_set.add(b1) 为书本添加作者
max.book_set.create(name="book2")
当然也可以直接remove
max.book_set.remove(books[键])
在视图页面展示多对多数据:
获取书本以及对应的作者。
view中:
books = Book.objects.all()
{% for book in books %}
<div>
<h5>{{book}}</h5>
{% for author in book.authors.all %}
{{ author }}
{% endfor %}
</div>
{% endfor %}
获取作者及对应写的书:
authors = Author.objects.all()
{% for author in authors %}
<div>
<h5>{{author.name}}</h5>
{% for book in author.book_set.all %}
{{ book }}
{% endfor %}
</div>
{% endfor %}
Author.objects.create(name='max')