Django ContentTypes框架使用場景

2022-05-17 07:43:12 字數 3701 閱讀 7483

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 import

models

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模型如下圖所示:

import

contenttype

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 import

post, 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 import

genericrelation

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形式的標記,...