django 外來鍵查詢 一對多 通過物件查詢和通過filter values 雙下劃線查詢
阿新 • • 發佈:2018-12-04
表結構:
from django.db import models class Book(models.Model): name = models.CharField(max_length=32) price = models.IntegerField() pub_date = models.DateField() publish = models.ForeignKey("Publish") class Publish(models.Model): name = models.CharField(max_length=32) city = models.CharField(max_length=32)
外來鍵為publish
表內容:
方法一:
正向查詢
是通過子表book物件取得外來鍵pub_id的相關聯的publish物件 然後通過屬性查詢這個publish的各種資訊
from django.shortcuts import render from .models import Book from .models import Publish # Create your views here. def index(req): book_obj = Book.objects.get(name="python") pub_obj = book_obj.publish print(pub_obj.name) return render(req,"index.html")
一號出版社
方法二:
反向查詢
是通過查詢主表publish的物件查詢相關聯的書籍
from django.shortcuts import render from .models import Book from .models import Publish # Create your views here. def index(req): pub_obj = Publish.objects.filter(name="一號出版社")[0] books = pub_obj.book_set.all() for book in books: print(book.publish.name) return render(req,"index.html")
一號出版社
一號出版社
方法三:
先通過外來鍵名字publish查詢publish物件 找到後通過publish的name欄位進行篩選
from django.shortcuts import render,HttpResponse
from .models import Book
from .models import Publish
# Create your views here.
def index(req):
ret = Book.objects.filter(publish__name="二號出版社").values("name","price")
#查詢記錄(filter values 雙下劃線__)
print(ret)
return render(req,"index.html")
<QuerySet [{'name': 'java', 'price': 22}, {'name': 'linux運維', 'price': 55}, {'name': 'linux運維2', 'price': 66}]>
查詢書名為python的出版社名字
---------雙下劃線用在values中,切記要加引號
from django.shortcuts import render,HttpResponse
from .models import Book
from .models import Publish
# Create your views here.
def index(req):
ret = Book.objects.filter(name="python").values("publish__name")
#查詢記錄(filter values 雙下劃線__)
print(ret)
return render(req,"index.html")
<QuerySet [{'publish__name': '一號出版社'}]>