關於Django多變關聯查詢的orm操做

表間關係主外鍵約束,主表存在字表的約束字段。java

在一對多或者多對多的狀況下,能夠採用正面查詢操做,和反面查詢操做。git

正面查詢,採用主表查詢的對象加字表的約束字段。spa

反向查詢用子表的對象用表名小寫加set加all方法。code

以下實例:對象

表間關係字段blog

class Book(models.Model): nid=models.AutoField(primary_key=True) title=models.CharField(max_length=32) price=models.DecimalField(max_digits=8,decimal_places=2) pub_date=models.DateField() publish=models.ForeignKey(to='Publish',on_delete=models.CASCADE)  #級聯刪除
    author=models.ManyToManyField(to='Author') def __str__(self): return self.title #出版社
class Publish(models.Model): nid=models.AutoField(primary_key=True) name=models.CharField(max_length=32) email=models.CharField(max_length=32) #做者
class Author(models.Model): nid=models.AutoField(primary_key=True) name=models.CharField(max_length=32) age=models.IntegerField() email=models.CharField(max_length=32) ad=models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)     #級聯刪除

    def __str__(self): return self.name #做者詳情
class AuthorDetail(models.Model): nid = models.AutoField(primary_key=True) addr=models.CharField(max_length=32) tel=models.IntegerField()

查詢java這本書的做者的名字和年齡:ci

正面查詢it

    # book_obj = models.Book.objects.filter(title__contains='Java').first()
    # print(book_obj.author.all().values('name','age'))

王璐寫過的書籍名稱和價格class

反向查詢email

   # aut_obj = models.Author.objects.filter(name='王璐').first()
    # print(aut_obj.book_set.all().values('title','price'))

*****************************************************************************

一對一的表間關係則不須要all方法或者添加_set屬性

做者李明的詳細信息

正向查詢

    # aut_obj = models.Author.objects.filter(name='胡文遠').first()
    # print(aut_obj.ad.addr,aut_obj.ad.tel)

湖北籍的做者信息(此處狀況特殊仍舊是一對一)

反向查詢

    obj = models.AuthorDetail.objects.filter(addr__contains='湖北').first() print(obj.author.name)
相關文章
相關標籤/搜索