django model 的正向查詢和反向查詢理解
一下是幾個 model 建模
from django.db import models
class Person(models.Model): name = models.CharField(max_length=64) age = models.IntegerField() tel = models.CharField(max_length=64)
@property def all_cars(self): return cars.all()
@property def info(self): # return the name and tel of person return '%s %s' % (self.name, self.tel)
class Car(models.Model): owner = models.Foreignkey(Person, related_name='cars') name = models.CharField(max_length=64) price = models.FloatField()
在上面的兩個表中,Person表是主表,Car是字表,Car表外來鍵至Person表。
子表查詢主表為正向查詢
car = Car.object.get(id=1)
owner = car.owner #查詢該車車主
主表查詢子表為反向查詢
tom = Person.object.get(id=1)
#查詢此人有多少車
#方式一 Django 預設每個主表的物件都有一個外來鍵的屬性
#可以通過它查詢所有屬於主表的子表資訊
# 查詢方式:主表.子表_set() # 返回值為一個queryset物件
Tom.Car_set().all()
# 方式二: # 通過在外來鍵中設定related_name屬性值既可 Tom.cars.all()
# 方式三: # 通過@property裝飾器在model中預定義方法實現 Tom.all_cars