这篇文章主要介绍了Django的数据模型访问多对多键值的方法,Django是Python丰富多彩的web框架中最具人气的一个,需要的朋友可以参考下

这里先来借用一个书本(book)的数据模型作为例子:

from django.db import models

class Publisher(models.Model):
  name = models.CharField(max_length=30)
  address = models.CharField(max_length=50)
  city = models.CharField(max_length=60)
  state_province = models.CharField(max_length=30)
  country = models.CharField(max_length=50)
  website = models.URLField()

  def __unicode__(self):
    return self.name

class Author(models.Model):
  first_name = models.CharField(max_length=30)
  last_name = models.CharField(max_length=40)
  email = models.EmailField()

  def __unicode__(self):
    return u'%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
  title = models.CharField(max_length=100)
  authors = models.ManyToManyField(Author)
  publisher = models.ForeignKey(Publisher)
  publication_date = models.DateField()

  def __unicode__(self):
    return self.title

 访问多对多值(Many-to-Many Values)

多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。 例如,这里是如何查看书籍的作者:

>>> b = Book.objects.get(id=50)
>>> b.authors.all()
[<Author: Adrian Holovaty>, <Author: Jacob Kaplan-Moss>]
>>> b.authors.filter(first_name='Adrian')
[<Author: Adrian Holovaty>]
>>> b.authors.filter(first_name='Adam')
[]

反向查询也可以。 要查看一个作者的所有书籍,使用author.book_set ,就如这样:

>>> a = Author.objects.get(first_name='Adrian', last_name='Holovaty')
>>> a.book_set.all()
[<Book: The Django Book>, <Book: Adrian's Other Book>]

这里,就像使用 ForeignKey字段一样,属性名book_set是在数据模型(model)名后追加_set。

最新资讯
苹果调查16英寸MacBook Pro“爆音”问题

苹果调查16英寸MacBoo

Mac Rumors消息,苹果公司正在调查16英寸MacBook Pro笔
人民锐评:给用户挖“坑” 视频网站小心绊倒自己

人民锐评:给用户挖“坑

但凡买过视频网站会员的网友,恐怕都有这个烦恼。花钱买
孙正义对话马云:我还没有取得任何成就 仍是挑战者

孙正义对话马云:我还没

马云评价孙正义, “在投资方面可能是世界上最有胆量的
消息称2020款苹果iPhoneSE 2可能被命名为iPhone 9

消息称2020款苹果iPho

据日(J)本(P)博客网站Mac Otakara引用“知情人士”消息称,广
格力新格局 谁是最大赢家

格力新格局 谁是最大

在一系列错综复杂的股权架构设计背后,以低价参与416.6
格力地产回应“抽屉协议”:信披不存在重大遗漏

格力地产回应“抽屉协

不需要内容不需要内容不需要内容不需要内容不需要内容
最新文章
python实现在cmd窗口显示彩色文字

python实现在cmd窗口

今天小编就为大家分享一篇python实现在cmd窗口显示彩
解决python xx.py文件点击完之后一闪而过的问题

解决python xx.py文件

今天小编就为大家分享一篇解决python xx.py文件点击完
pandas DataFrame 交集并集补集的实现

pandas DataFrame 交

这篇文章主要介绍了pandas DataFrame 交集并集补集的
pandas计数 value_counts()的使用

pandas计数 value_cou

这篇文章主要介绍了pandas计数 value_counts()的使用,
详解python深浅拷贝区别

详解python深浅拷贝区

在本篇文章里小编给大家整理了关于python深浅拷贝区别
详解10个可以快速用Python进行数据分析的小技巧

详解10个可以快速用Py

这篇文章主要介绍了详解10个可以快速用Python进行数据