文章目錄
- 關聯關系
- Many-to-one relationships
- Many-to-many relationships?
- django學習——model中的get和filter方法的區別
模型
模型是您的數據唯一而且準確的信息來源。它包含您正在儲存的數據的重要字段和行為。一般來說,每一個模型都映射一個數據庫表。
基礎:
- 每個模型都是一個 Python 的類,這些類繼承 django.db.models.Model
- 模型類的每個屬性都相當于一個數據庫的字段。
- 綜上訴說,Django 給你一個自動生成訪問數據庫的 API;請參閱 進行查詢。
關聯關系
Many-to-one relationships
定義一個多對一的關聯關系,使用 django.db.models.ForeignKey 類。就和其他 Field 字段類型一樣,只需要在你模型中添加一個值為該類的屬性。
from django.db import models# Create your models here.
from django.db import models#多對一關系(如果一個 Car 模型 有一個制造者 Manufacturer --就是說一個 Manufacturer 制造許多輛車,但是每輛車都屬于某個特定的制造者)
class Manufacturer(models.Model):pass#....
class Car(models.Model):manufacturer = models.ForeignKey(Manufacturer,on_delete=models.CASCADE)#...
Many-to-many relationships?
定義一個多對多的關聯關系,使用 django.db.models.ManyToManyField 類。就和其他 Field 字段類型一樣,只需要在你模型中添加一個值為該類的屬性。
如果你只是想要一個類似于記錄披薩和配料之間混合和搭配的簡單多對多關系,標準的 ManyToManyField 就足夠你用了。然而,有的時候你可能會需要在兩個模型的關系中記錄更多的數據。
舉例來講,考慮一個需要跟蹤音樂人屬于哪個音樂組的應用程序。在人和他們所在的組之間有一個多對多關系,你可以使用 ManyToManyField 來代表這個關系。然而,你想要記錄更多的信息在這樣的所屬關系當中,比如你想要記錄某人是何時加入一個組的。
對于這些情況,Django允許你指定用于控制多對多關系的模型。你可以在中間模型當中添加而外的字段。在實例化 ManyToManyField 的時候使用 through 參數指定多對多關系使用哪個中間模型。對于我們舉的音樂家的例子,代碼如下:
from django.db import modelsclass Person(models.Model):name = models.CharField(max_length=128)def __str__(self):return self.nameclass Group(models.Model):name = models.CharField(max_length=128)members = models.ManyToManyField(Person, through='Membership')def __str__(self):return self.nameclass Membership(models.Model):person = models.ForeignKey(Person, on_delete=models.CASCADE)group = models.ForeignKey(Group, on_delete=models.CASCADE)date_joined = models.DateField()invite_reason = models.CharField(max_length=64)
具體的參考:
官方文檔:(https://docs.djangoproject.com/zh-hans/2.1/topics/db/models/#automatic-primary-key-fields)
django學習——model中的get和filter方法的區別
django的get方法是從數據庫的取得一個匹配的結果,返回一個對象,如果記錄不存在的話,它會報錯。
django的filter方法是從數據庫的取得匹配的結果,返回一個對象列表,如果記錄不存在的話,它會返回[]。