1. 程式人生 > >django組件之contenttype

django組件之contenttype

.com 圖片 技術分享 表設計 數據庫表結構 field auto 分享 創建表

方式1:適用於1張表和另一張表要關聯的時候。

1.路飛學成表設計:

技術分享圖片

2.將2個價格策略表合並1張表。

技術分享圖片

3.如果再加一張表,那價格策略表的表結構會發生改變。 這樣不合理的,我們的表結構一般設計完就不會改變。

技術分享圖片

方式2:適用於1張表和多張表關聯的時候。

4.接下來換一種方式。表名+id 數據庫表結構不會改變。

技術分享圖片

5.創建一個新項目

技術分享圖片

6.創建表

技術分享圖片

方式3:ContentType組件

7.settings.py

技術分享圖片

8.

  1. from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation
    from django.contrib.contenttypes.models import ContentType
  1. content_type = models.ForeignKey(ContentType, verbose_name="關聯的表名稱")
  1. object_id = models.IntegerField(verbose_name="關聯的表中的數據行ID")
  1. 技術分享圖片

9.假設,表數據很多,有個關聯表的名字改了,需要改所有的數據很麻煩。那就再創建一張表,專門存放表名字。

技術分享圖片

10. 第三張表不用自己創建 ContentType 組件已經幫我們創建好了,專門用來存放表名字。

技術分享圖片

11.生成表,查看表數據

技術分享圖片

12.添加表數據

普通課程表數據

技術分享圖片

學位課程表數據

技術分享圖片

13. 問題1.為學位課“python全棧”添加一個價格策略:一個月9.9

urls.py

技術分享圖片

views.py

技術分享圖片

GenericForeignKey:快速實現content_type操作

不生成數據庫,幫助你快速實現content_type操作。 content_object = GenericForeignKey(‘content_type‘,‘object_id‘)

技術分享圖片

1.學位課表id=8 書id=1(title=‘python全棧‘) 添加了3個價格。

技術分享圖片

運行結果:

技術分享圖片

查看價格策略表數據

技術分享圖片

2.學位課表id=8 書id=1(title=‘python全棧‘) 添加了3個價格。

技術分享圖片

運行結果:

技術分享圖片

3.根據課程ID獲取課程,並獲取讀取課程的所有價格策略。

不生成數據庫,僅用於反向查找 。price_policy_list = GenericRelation("PricePolicy")

models.py

技術分享圖片

views.py

技術分享圖片

小結:

content-type Django內置的一個組件,幫助開發者做連表操作。【混搭】

技術分享圖片

django組件之contenttype