最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)單了解Django ContentType內(nèi)置組件

 更新時(shí)間:2019年07月23日 09:49:58   作者:little_pd  
這篇文章主要介紹了簡(jiǎn)單了解Django ContentType內(nèi)置組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、引出問(wèn)題

假如有這兩張表,它們中的課程可能價(jià)格不一樣、周期不一樣、等等...不一樣...,現(xiàn)在有一張價(jià)格策略表,怎么就用一張表報(bào)保存它們之間不同的數(shù)據(jù)呢?

可能你會(huì)這樣:

確實(shí)是行!但是,如果有很多不同類型的課程,那么這樣表就太多空值了!

沒(méi)辦法,這一張表不行,再創(chuàng)建一張不就行了,就像這樣:

確實(shí),對(duì)于這種情況,Django就是這樣做的。

現(xiàn)在,有了 ContentType,我們只需創(chuàng)建三張表,就實(shí)現(xiàn)跟上面的效果一模一樣了。

這是因?yàn)?Django 本身就會(huì)新建 django_content_type 這張表,這張表就保存了 model 中的表名。

二、ContentType

那么怎么創(chuàng)建這種關(guān)系呢?如下:

這里,DegreeCourse 表沒(méi)有使用 GenericRelation,則不能使用下面說(shuō)的第3點(diǎn),否則報(bào)錯(cuò),要想使用就跟 Course 表一樣添加即可。

對(duì)于 GenericRelation 和 GenericForeignKey 類型字段,不會(huì)在數(shù)據(jù)庫(kù)生成列!

三、測(cè)試

# views.py
from django.shortcuts import HttpResponse
from django.contrib.contenttypes.models import ContentType
from appxx import models

1、在價(jià)格策略表中添加一條數(shù)據(jù)。

# 方式1
def test(request):
  models.PricePolicy.objects.create(
    price=100,
    valid_period=7,
    object_id=3,
    content_type=ContentType.objects.get(model="course")
  )
  return HttpResponse("ok")
# 方式2
def test(request):
  models.PricePolicy.objects.create(
    price=200,
    valid_period=14,
    content_object=models.Course.objects.get(id=3) # 對(duì)應(yīng)Course表id為3的價(jià)格策略
    # content_object=models.DegreeCourse.objects.get(id=2) # 對(duì)應(yīng)DegreeCourse表id為2的價(jià)格策略
  )
  return HttpResponse("ok")

2、 根據(jù)某個(gè)價(jià)格策略對(duì)象,找到對(duì)應(yīng)的表和數(shù)據(jù)。(是根據(jù) GenericForeignKey類型字段實(shí)現(xiàn)的)

def test(request):
  obj = models.PricePolicy.objects.get(id=1)
  print(obj.content_object.id, obj.content_object.name) # 自動(dòng)找到
  return HttpResponse("ok")

3、 找到某個(gè)課程關(guān)聯(lián)的所有價(jià)格策略。(是根據(jù) GenericRelation 類型字段實(shí)現(xiàn)的)

def test(request):
  obj = models.Course.objects.get(id=1)
  for item in obj.policy_list.all():
    print(item.id, item.price, item.valid_period)
  return HttpResponse("ok")

關(guān)系圖:

四、總結(jié)

什么時(shí)候才用ContentType?

當(dāng)一張表跟 n 張表動(dòng)態(tài)地創(chuàng)建 ForeignKey 關(guān)系時(shí),而不是創(chuàng)建太多列,因?yàn)閿?shù)據(jù)表中會(huì)有很多空值。

ContentType 通過(guò)僅兩列字段就實(shí)現(xiàn)了 n 張表的 ForeignKey 關(guān)系。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python FastAPI 多參數(shù)傳遞的示例詳解

    Python FastAPI 多參數(shù)傳遞的示例詳解

    這篇文章主要介紹了Python FastAPI 多參數(shù)傳遞,FastAPI通過(guò)模板來(lái)匹配URL中的參數(shù)列表,大概分為三類方式傳遞參數(shù),每種方式結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • 對(duì)python讀寫(xiě)文件去重、RE、set的使用詳解

    對(duì)python讀寫(xiě)文件去重、RE、set的使用詳解

    今天小編就為大家分享一篇對(duì)python讀寫(xiě)文件去重、RE、set的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python實(shí)現(xiàn)數(shù)據(jù)清洗(缺失值與異常值處理)

    python實(shí)現(xiàn)數(shù)據(jù)清洗(缺失值與異常值處理)

    今天小編就為大家分享一篇python實(shí)現(xiàn)數(shù)據(jù)清洗(缺失值與異常值處理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python的json包位置及用法總結(jié)

    python的json包位置及用法總結(jié)

    在本篇內(nèi)容里小編給大家分享了關(guān)于python的json包用法詳解內(nèi)容,需要的朋友們跟著學(xué)習(xí)下吧。
    2020-06-06
  • python 30行代碼實(shí)現(xiàn)螞蟻森林自動(dòng)偷能量

    python 30行代碼實(shí)現(xiàn)螞蟻森林自動(dòng)偷能量

    這篇文章主要介紹了python 30行代碼實(shí)現(xiàn)螞蟻森林自動(dòng)偷能量的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-02-02
  • Python 將Matrix、Dict保存到文件的方法

    Python 將Matrix、Dict保存到文件的方法

    今天小編就為大家分享一篇Python 將Matrix、Dict保存到文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 使用Matlab將矩陣保存到csv和txt文件

    使用Matlab將矩陣保存到csv和txt文件

    這篇文章主要介紹了使用Matlab將矩陣保存到csv和txt文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Tensorflow:轉(zhuǎn)置函數(shù) transpose的使用詳解

    Tensorflow:轉(zhuǎn)置函數(shù) transpose的使用詳解

    今天小編就為大家分享一篇Tensorflow:轉(zhuǎn)置函數(shù) transpose的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 使用python更改Word文檔字體的操作代碼

    使用python更改Word文檔字體的操作代碼

    更改文字字體是編輯和美化Word文檔時(shí)的一項(xiàng)常見(jiàn)需求,使用合適的字體不僅可以提升文檔的整體視覺(jué)效果,還能突顯關(guān)鍵信息,本文將介紹如何通過(guò)Python代碼更改Word文檔字體,實(shí)現(xiàn)批量操作與自動(dòng)化,需要的朋友可以參考下
    2024-08-08
  • 如何表示python中的相對(duì)路徑

    如何表示python中的相對(duì)路徑

    在本篇文章里小編給大家分享的是關(guān)于python相對(duì)路徑寫(xiě)法以及相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07

最新評(píng)論

隆安县| 玉林市| 临朐县| 东乌珠穆沁旗| 柘城县| 若尔盖县| 西吉县| 阜平县| 新绛县| 包头市| 浑源县| 图们市| 宜兴市| 丰镇市| 奉新县| 双江| 永平县| 宜昌市| 隆回县| 云龙县| 临沧市| 九龙县| 竹溪县| 抚顺市| 秀山| 神农架林区| 临洮县| 六枝特区| 永顺县| 双江| 连平县| 五常市| 毕节市| 黄石市| 东乌| 喜德县| 内丘县| 泰安市| 泸西县| 中宁县| 阿城市|