首页 > 编程 > Python > 正文

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

2020-01-04 18:01:10
字体:
来源:转载
供稿:网友

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

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

 

 
  1. from django.db import models 
  2.  
  3. class Publisher(models.Model): 
  4. name = models.CharField(max_length=30) 
  5. address = models.CharField(max_length=50) 
  6. city = models.CharField(max_length=60) 
  7. state_province = models.CharField(max_length=30) 
  8. country = models.CharField(max_length=50) 
  9. website = models.URLField() 
  10.  
  11. def __unicode__(self): 
  12. return self.name 
  13.  
  14. class Author(models.Model): 
  15. first_name = models.CharField(max_length=30) 
  16. last_name = models.CharField(max_length=40) 
  17. email = models.EmailField() 
  18.  
  19. def __unicode__(self): 
  20. return u'%s %s' % (self.first_name, self.last_name) 
  21.  
  22. class Book(models.Model): 
  23. title = models.CharField(max_length=100) 
  24. authors = models.ManyToManyField(Author) 
  25. publisher = models.ForeignKey(Publisher) 
  26. publication_date = models.DateField() 
  27.  
  28. def __unicode__(self): 
  29. return self.title 

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

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

 

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

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

 

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表