Django的数据模型访问多对多键值的方法

yipeiwu_com6年前Python基础

这里先来借用一个书本(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。

相关文章

Python脚本判断 Linux 是否运行在虚拟机上

在 WebHostingTalk 论坛上有些国外奸商会把虚拟机当作独立服务器卖,去年7月份的时候就有一位中国同胞上当受骗,并在 WHT 上发帖声讨,证据确凿,甚至连服务商自己也承认,回帖...

完美解决在oj中Python的循环输入问题

完美解决在oj中Python的循环输入问题

完美解决在oj中Python的循环输入问题 这几天做题被python的循环输入问题给烦死了,好好查了一下,记录在此。 while True: t= sys.stdin.readl...

Python的MongoDB模块PyMongo操作方法集锦

开始之前当然要导入模块啦: >>> import pymongo 下一步,必须本地mongodb服务器的安装和启动已经完成,才能继续下去。 建立于MongoCl...

python中实现字符串翻转的方法

具体代码如下所示: #字符串反转 def reverse (s): rt = '' for i in range(len(s)-1,-1,-1): rt += s[i...

使用Django简单编写一个XSS平台的方法步骤

1) 简要描述 原理十分简单2333,代码呆萌,大牛勿喷 >_< 2) 基础知识 XSS攻击基本原理和利用方法 Django框架的使用 3) Let's st...