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