表結構
from django.db import models
class Publisher(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
publisher = models.ForeignKey('Publisher', related_name='person_book', related_query_name='ooxx')
插入資料
Book表
id title pubtime person_id
書1 1533225600000 1
書2 1533225600000 1
書3 1534435200000 1
書4 1535644800000 2
書5 1535126400000 3
Publisher表
id name
1 出版社1
2 出版社2
3 出版社3
正向查詢: 外鍵所在表去查另一張表,Book >> Publisher
反向查詢:普通表去查外鍵所在的表,Publisher >> Book
正向查詢,基于物件跨表查詢
book_obj = models.Book.objects.first() # 取到書籍物件
book_obj.publisher.name # 書籍的出版社名字,html
book_obj.person.id # 書籍的出版社id,html
跨表查詢,利用雙下劃線跨表查詢
models.Book.objects.filter(id=1).values(‘publisher__name’) # 查詢id是1的書的出版社的名字,一條雙下劃線就是跨一張表
models.Book.objects.filter(id=1).values_list(‘publisher__name’)
反向查詢
物件查詢 obj.表名_set()
publisher_obj = models.Publisher.objects.first() # 找到第一個出版社物件
ret = publisher_obj.book_set.all() # 找到第一個出版社出版的所有數
for i in ret: # 回圈物件
print(i.name) # 列印出每一個書的書名
publisher_obj = models.Publisher.objects.first() # 找到第一個出版社物件
books = publisher_obj.book_set.all() # 找到第一個出版社出版的所有書
titles = books.values_list(“name”) # 找到第一個出版社出版的所有書的書名
print(titles)
因為使用了releted_name,就是用person_book代替了表欄位名字
表欄位person = models.ForeignKey(Person, related_name=‘person_book’)
所以這一這樣寫
books = publisher_obj.person_book.all()
titles = books.values_list(‘name’)
print(titles)
如果表欄位person = models.ForeignKey(Person, related_name=‘person_book’,related_query_name=“xxoo”)
related_query_name=“xxoo”,這里表示跨表查詢xxoo代替表的名字book
books = publisher_obj.ooxx_set.all()
基于雙下劃線
ret = models.Publisher.objects.filter(id=1).values_list(‘person_book__name’)
person_book是通過releted_name給對應關系起的名字,通過person_book就找到了關聯的表,再通過雙下劃線找到name
print(ret)
附帶django里面腳本的代碼
import os
if name == ‘main’:
# 加載Django專案的配置資訊
os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “專案名.settings”)
# 匯入Django,并啟動Django專案
import django
django.setup()
from app01 import models
# 查詢id為1的出版社出版的所有書的name
ret = models.Publisher.objects.filter(id=1).values_list('person_book__name')
print(ret)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/236596.html
標籤:python
