django組件之contenttype(一)
方式1:適用於1張表和另外一張表要關聯的時候。
1.路飛學成表設計:python
2.將2個價格策略表合併1張表。數據庫
3.若是再加一張表,那價格策略表的表結構會發生改變。 這樣不合理的,咱們的表結構通常設計完就不會改變。django
方式2:適用於1張表和多張表關聯的時候。
4.接下來換一種方式。表名+id 數據庫表結構不會改變。post
5.建立一個新項目url
6.建立表spa
方式3:ContentType組件
7.settings.py設計
8.3d
from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation
from django.contrib.contenttypes.models import ContentType
content_type = models.ForeignKey(ContentType, verbose_name="關聯的表名稱")
object_id = models.IntegerField(verbose_name="關聯的表中的數據行ID")
9.假設,表數據不少,有個關聯表的名字改了,須要改全部的數據很麻煩。那就再建立一張表,專門存放表名字。blog
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內置的一個組件,幫助開發者作連表操做。【混搭】