Django_外鍵查詢和反查詢


一、ForeignKey

@property裝飾器的作用是返回一個屬性特性,在數據庫中也有一些小技巧可以拿來用,比如今天要寫的外鍵查詢和反向查詢的內容。

 1 from django.db import models
 2 
 3 class Person(models.Model):
 4     name = models.CharField(max_length=20, verbose_name='姓名')
 5     age = models.IntegerField(default=0, verbose_name='年齡')
 6     tel = models.CharField(max_length=11, verbose_name='電話')
 7 
 8     class Meta:
 9         verbose_name = ''
10         verbose_name_plural = verbose_name
11 
12     @property
13     def all_cars(self):
14         return self.all()
15     
16     @property
17     def info(self):
18         # return the name and tel of person
19         return '%s %s' % (self.name, self.tel)
20 
21 class Car(models.Model):
22     owner = models.ForeignKey(Person, on_delete=models.CASCADE, related_name='cars', verbose_name='車主')
23     brand = models.CharField(max_length=64, verbose_name='品牌')
24     price = models.FloatField(default=0, verbose_name='價格')
25 
26     class Meta:
27         verbose_name = '汽車'
28         verbose_name_plural = verbose_name

在上面我們創建了兩個表,Person為主表,Car為子表,Car中有外鍵(ForeignKey)鍵至Person。

  • 子表查詢主表的方式:
1 car = Car.objects.get(id=1)
2 # 查詢該車的車主
3 owner = car.owner
  • 主表查詢子表的方式:
1 Bruce = Person.objects.get(id=1)
2 """查詢此人有多少車"""
3 # 方式一:Django默認每個主表都有一個外鍵屬性
4 # 通過該方式來查詢屬性,方式:主表.從表_set
5 Bruce.car_set.all()
6 # 方式二:通過在外鍵中設置related_name屬性值訪問,本例設置related_name='cars'
7 Bruce.self.all()
8 # 方式三:通過@property裝飾器在主表model預定義方法實現:
9 Bruce.all_cars

查詢一些自己需要的組合數據的時候,比如獲取Person的一些個人信息,在@property的預定義info方法下,Bruce.info即可實現。

 

1 # 利用@property裝飾器在Person中預定義info方法實現獲取個人信息
2 Bruce_info = Bruce.info

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM