python-django的ManyToMany模型

假定两个模型:

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')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值