91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

簡單了解Django ContentType內置組件

發布時間:2020-10-05 12:45:26 來源:腳本之家 閱讀:157 作者:little_pd 欄目:開發技術

一、引出問題

簡單了解Django ContentType內置組件

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

可能你會這樣:

簡單了解Django ContentType內置組件

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

沒辦法,這一張表不行,再創建一張不就行了,就像這樣:

簡單了解Django ContentType內置組件

確實,對于這種情況,Django就是這樣做的。

現在,有了 ContentType,我們只需創建三張表,就實現跟上面的效果一模一樣了。

這是因為 Django 本身就會新建 django_content_type 這張表,這張表就保存了 model 中的表名。

簡單了解Django ContentType內置組件

二、ContentType

那么怎么創建這種關系呢?如下:

簡單了解Django ContentType內置組件

這里,DegreeCourse 表沒有使用 GenericRelation,則不能使用下面說的第3點,否則報錯,要想使用就跟 Course 表一樣添加即可。

對于 GenericRelation 和 GenericForeignKey 類型字段,不會在數據庫生成列!

三、測試

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

1、在價格策略表中添加一條數據。

# 方式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) # 對應Course表id為3的價格策略
    # content_object=models.DegreeCourse.objects.get(id=2) # 對應DegreeCourse表id為2的價格策略
  )
  return HttpResponse("ok")

2、 根據某個價格策略對象,找到對應的表和數據。(是根據 GenericForeignKey類型字段實現的)

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

3、 找到某個課程關聯的所有價格策略。(是根據 GenericRelation 類型字段實現的)

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")

關系圖:

簡單了解Django ContentType內置組件

四、總結

什么時候才用ContentType?

當一張表跟 n 張表動態地創建 ForeignKey 關系時,而不是創建太多列,因為數據表中會有很多空值。

ContentType 通過僅兩列字段就實現了 n 張表的 ForeignKey 關系。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蕲春县| 龙门县| 舞钢市| 买车| 苏尼特右旗| 苏州市| 瑞昌市| 阜南县| 石台县| 德令哈市| 晋江市| 牟定县| 涟水县| 乳源| 贵南县| 余江县| 文昌市| 安平县| 习水县| 达尔| 绥滨县| 颍上县| 临邑县| 合江县| 海口市| 长泰县| 呼玛县| 阳西县| 金门县| 涿州市| 尼勒克县| 贡觉县| 汨罗市| 广昌县| 靖州| 澄迈县| 湖南省| 乌兰浩特市| 温州市| 建平县| 平昌县|