django框架中的模型
文章目錄
- 關(guān)聯(lián)關(guān)系
- Many-to-one relationships
- Many-to-many relationships?
- django學(xué)習(xí)——model中的get和filter方法的區(qū)別
模型
模型是您的數(shù)據(jù)唯一而且準(zhǔn)確的信息來源。它包含您正在儲(chǔ)存的數(shù)據(jù)的重要字段和行為。一般來說,每一個(gè)模型都映射一個(gè)數(shù)據(jù)庫表。
基礎(chǔ):
- 每個(gè)模型都是一個(gè) Python 的類,這些類繼承 django.db.models.Model
- 模型類的每個(gè)屬性都相當(dāng)于一個(gè)數(shù)據(jù)庫的字段。
- 綜上訴說,Django 給你一個(gè)自動(dòng)生成訪問數(shù)據(jù)庫的 API;請(qǐng)參閱 進(jìn)行查詢。
關(guān)聯(lián)關(guān)系
Many-to-one relationships
定義一個(gè)多對(duì)一的關(guān)聯(lián)關(guān)系,使用 django.db.models.ForeignKey 類。就和其他 Field 字段類型一樣,只需要在你模型中添加一個(gè)值為該類的屬性。
from django.db import models# Create your models here. from django.db import models#多對(duì)一關(guān)系(如果一個(gè) Car 模型 有一個(gè)制造者 Manufacturer --就是說一個(gè) Manufacturer 制造許多輛車,但是每輛車都屬于某個(gè)特定的制造者) class Manufacturer(models.Model):pass#.... class Car(models.Model):manufacturer = models.ForeignKey(Manufacturer,on_delete=models.CASCADE)#...Many-to-many relationships?
定義一個(gè)多對(duì)多的關(guān)聯(lián)關(guān)系,使用 django.db.models.ManyToManyField 類。就和其他 Field 字段類型一樣,只需要在你模型中添加一個(gè)值為該類的屬性。
如果你只是想要一個(gè)類似于記錄披薩和配料之間混合和搭配的簡單多對(duì)多關(guān)系,標(biāo)準(zhǔn)的 ManyToManyField 就足夠你用了。然而,有的時(shí)候你可能會(huì)需要在兩個(gè)模型的關(guān)系中記錄更多的數(shù)據(jù)。
舉例來講,考慮一個(gè)需要跟蹤音樂人屬于哪個(gè)音樂組的應(yīng)用程序。在人和他們所在的組之間有一個(gè)多對(duì)多關(guān)系,你可以使用 ManyToManyField 來代表這個(gè)關(guān)系。然而,你想要記錄更多的信息在這樣的所屬關(guān)系當(dāng)中,比如你想要記錄某人是何時(shí)加入一個(gè)組的。
對(duì)于這些情況,Django允許你指定用于控制多對(duì)多關(guān)系的模型。你可以在中間模型當(dāng)中添加而外的字段。在實(shí)例化 ManyToManyField 的時(shí)候使用 through 參數(shù)指定多對(duì)多關(guān)系使用哪個(gè)中間模型。對(duì)于我們舉的音樂家的例子,代碼如下:
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學(xué)習(xí)——model中的get和filter方法的區(qū)別
django的get方法是從數(shù)據(jù)庫的取得一個(gè)匹配的結(jié)果,返回一個(gè)對(duì)象,如果記錄不存在的話,它會(huì)報(bào)錯(cuò)。
django的filter方法是從數(shù)據(jù)庫的取得匹配的結(jié)果,返回一個(gè)對(duì)象列表,如果記錄不存在的話,它會(huì)返回[]。
總結(jié)
以上是生活随笔為你收集整理的django框架中的模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 统一身份认证平台
- 下一篇: django框架中表单