django contenttypes是乙個非常有用的框架,主要用來建立模型間的通用關係(generic relation)。不過由於其非常抽象,
今天我們來重點講下它的使用場景及如何使用django contenttypes。
#'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'',]
django contenttypes框架使用場景
才建立comment與那個模型的關係。這時你就需要使用django contenttypes了。
from django.db importmodels
from django.contrib.auth.models import
user #
create your models here.
class
post(models.model):
author =models.foreignkey(user)
title = models.charfield(max_length=75)
body = models.textfield(blank=true)
class
picture(models.model):
author =models.foreignkey(user)
image =models.imagefield()
caption = models.textfield(blank=true)
class
comment(models.model):
author =models.foreignkey(user)
body = models.textfield(blank=true)
post
= models.foreignkey(post, null=true)
picture = models.foreignkey(picture, null=
true)
django contenttype提供了一種genericforeignkey的型別,通過這種型別可以指定content_object。修改過的comment模型如下圖所示:
importcontenttype
import
genericforeignkey
class
comment(models.model):
author =models.foreignkey(user)
body = models.textfield(blank=true)
content_type
= models.foreignkey(contenttype)
object_id = models.positiveintegerfield()
content_object = genericforeignkey(content_type,object_id)
comment裡加了3個字段:
你只需要將例項化的物件user, post或picture傳入comment。
user = user.objects.create_user(username='user1
', password='
2333')
post = post.objects.create(author=user,
title='
title1',
body=''
)picture = picture.objects.create(author=user,
image="
default.png",
caption='
picture1')
from foreign.models importpost, picture, common
>>> from django.contrib.auth.models import
user
>>> user = user.objects.get(username='
user1')
>>> post = post.objects.get(title='
title1')
>>>c = comment.objects.create(author=user, body='', content_object=post)
>>> picture = picture.objects.get(caption='
picuture1')
>>>c1 = comment.objects.create(author=user, body='', content_object=
picture)
我們更希望直接從模型中獲取或建立comment,
我們只需在模型中建立乙個與comment的genericrelation即可。
注意該欄位不會儲存於資料庫中。
from django.contrib.contenttypes.fields importgenericrelation
class
post(models.model):
author =models.foreignkey(user)
title = models.charfield(max_length=75)
body = models.textfield(blank=true)
comments
= genericrelation('comment')
class
picture(models.model):
author =models.foreignkey(user)
image =models.imagefield()
caption = models.textfield(blank=true)
comments
= genericrelation('comment'
)
>>> me = user.objects.get(username='myusername')
>>> pic = picture.objects.get(author=me)
>>> pic.comments.create(author=me, body="
man, i'm cool!")
>>> pic.comments.all()["
man, i'm cool!
">]
值得注意的是,如果在post中定義了genericrelation,刪除了乙個post例項,
在comment中所有與post相關例項也會被刪除。genericforeignkey不支援設定on_delete引數。
因此,如果對級聯刪除不滿意的話就不要設定genericrelation。
ENode框架使用場景簡述
enode是乙個.net平台下,純c 開發的,基於ddd,cqrs,es,eda,in memory架構風格的,可以幫助開發者開發高併發 高吞吐 可伸縮 可擴充套件的應用程式。enode可能的應用場景如下 當你正在找乙個ddd的開發框架時,可以考慮enode 當你想找乙個cqrs架構的實現框架時,可...
Git使用場景 命令使用場景
通過個人使用git時候的遇到的使用場景,熟悉了解相關命令,也記錄一下場景的使用方法。所有場景均在ubuntu16.04 linux 作業系統下,其他作業系統有差異的地方自行查閱相關資料。安裝git sudo apt get install git設定及檢視git配置 user.name和user.e...
mongodb 使用場景和不使用場景
1.mongodb介紹 mongodb 名稱來自 humongous 是乙個可擴充套件的高效能,開源,模式自由,面向文件的資料庫。它使用c 編寫。mongodb特點 a.面向集合的儲存 適合儲存物件及json形式的資料。b.動態查詢 mongo支援豐富的查詢表達方式,查詢指令使用json形式的標記,...