django 外鍵model的互相讀取


學習過程,參考別人的文章:
先設定一個關系模型如下:
[python]  view plain  copy
 
  1. from django.db import models  
  2. class Blog(models.Model):  
  3.    name = models.CharField(max_length=100)  
  4.    tagline = models.TextField()  
  5.    def __str__(self):              
  6.        return self.name  
  7.   
  8. class Author(models.Model):  
  9.    name = models.CharField(max_length=50)  
  10.    email = models.EmailField()  
  11.    def __str__(self):             
  12.        return self.name  
  13.    
  14. class Entry(models.Model):  
  15.    blog = models.ForeignKey(Blog)  
  16.    headline = models.CharField(max_length=255)  
  17.    body_text = models.TextField()  
  18.    authors = models.ManyToManyField(Author)  
  19.    def __str__(self):              
  20.       return self.headline  

 

上面的數據關系很明晰,Entry中有Blog和Author的外鍵

如果要在Entry中讀取blog和author的數據很容易:

entry = Entry.objects.all()  

    for e in entry:  

         blog = e.blog  

         author = e.authors  

 

 

如果采用的是vlaue方法取數值(得到字典類型數據),則如下:

 

user_info = models.Entry.objects.\ 
values('headline', 'body_text',
'blog__name',
'blog__tagline').first()

 

要在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)  

 

如果采用的是vlaue方法取數值,則如下:

user_info = models.UserInfo.objects.\ 
filter(username=username, password=password). \
values('nid', 'nickname',
'username', 'email',
'avatar',
'blog__nid',
'blog__site').first()

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM