1. 程式人生 > >django 外來鍵model的互相讀取

django 外來鍵model的互相讀取

先設定一個關係模型如下:

from django.db import models
class Blog(models.Model):
   name = models.CharField(max_length=100)
   tagline = models.TextField()
   def __str__(self):            
       return self.name

class Author(models.Model):
   name = models.CharField(max_length=50)
   email = models.EmailField()
   def __str__(self):           
       return self.name
 
class Entry(models.Model):
   blog = models.ForeignKey(Blog)
   headline = models.CharField(max_length=255)
   body_text = models.TextField()
   authors = models.ManyToManyField(Author)
   def __str__(self):            
      return self.headline

上面的資料關係很明晰,Entry中有Blog和Author的外來鍵,如果要在Entry中讀取blog和author的資料很容易:

entry = Entry.objects.all()
for e in entry:
    blog = e.blog
    author = e.authors

要在Blog和Author中讀取Entry也可以:

blog = Blog.objects.all()
entry = blog.entry_set.all()
 
author = Author.objects.all()
entry = author.entry_set.all()

下面通過entry使blog和author互相讀取,比如要知道一個blog的Author只需如下:

blogs = Blog.objects.all()
for blog in blogs:
    if blog.name== “我們想要查詢的部落格的name”
        author = blog. entry_set.authors

要查詢一個author的所有blog如下:

authors = Author.objects.all()
blogs = []
 
for author in authors:
    if author.name== “我們想要查詢的Author的name”
        for entry in author.entry_set.all():
            blogs.append(entry. blog)