Django 兩張表的正向查詢和反向查詢
阿新 • • 發佈:2020-10-12
Django的多表查詢
假設有模型
class Category(models.Model): id = models.CharField(primary_key = True,max_length = 255) type_name = models.CharField(max_length = 255) def __str__(self): return self.id+"."+self.type_name class Meta: db_table = "category" class BookList(models.Model): name = models.CharField(primary_key = True,max_length = 255) #書名 author = models.CharField(max_length = 255) #作者 read_num = models.CharField(max_length = 255) #閱讀人數 book_type = models.ForeignKey(Category, models.DO_NOTHING) #外來鍵 ,書的類別 class Meta: db_table = "booklist"
- 正向查詢就是查詢物件的主體是Category,要查詢Category模型對應表裡的資料
- 反向查詢就是查詢物件的主體是Category,要查詢的是BookList裡的資料
正向查詢
t = models.Category.objects.filter() >>> <QuerySet [<Category: 1.玄幻魔法>, <Category: 2.武俠修真>, <Category: 3.都市言情>, <Category: 4.歷史穿越>, <Category: 5.恐怖懸疑>, <Category: 6.遊戲競技>, <Category: 7.軍事科幻>, <Category: 8.女生頻道>]>
反向查詢
t[0].booklist_set.values("name") >>> <QuerySet [{'name': '七世悟道'}, {'name': '關於在異界求生這件小事'}, {'name': '刀鎮星河'}, {'name': '變身之女俠時代'}, {'name': '吾名丹尊萬木'}, {'name': '基因販賣商'}, {'name': '天地霸體訣'}, {'name': '天革'}, {'name': '天驕狂尊'}, {'name': '太古魂帝'}, {'name': '守域奇緣'}, {'name': '悲劇發生前[快穿]'}, {'name': '我有一張沾沾卡'}, {'name': '我的絕美御姐老婆'}, {'name': '我的美女俏老婆'}, {'name': '我的鉚鋼蒸汽時代'}, {'name': '戰道天圖'}, {'name': '無敵從滿級屬性開始'}, {'name': '極品朋友圈'}, {'name': '殘魄御天'}, '...(remaining elements truncated)...']>.
反向查詢的更簡單的步驟,可以使用select_related方法實現
#t = model.Category.objects.select_related("type_name").values("name")