Django 中介模型

2021-09-25 11:11:54 字數 2755 閱讀 2885

有多對多字段的時候自己建立的第三章表就是中介模型

class

article(models.model):

'''文章表

'''title = models.charfield(max_length=64,verbose_name="

文章標題")

summary = models.charfield(max_length=244, verbose_name="

文章概要")

create_time = models.datetimefield(verbose_name="

建立時間

",auto_now_add=true)

update_time = models.datetimefield(verbose_name="

修改時間

",auto_now=true)

up_count = models.integerfield(verbose_name="

點讚數",default=0)

down_count = models.integerfield(verbose_name="

點滅數",default=0)

comment_count = models.integerfield(verbose_name="

",default=0)

read_count = models.integerfield(verbose_name="

閱讀數",default=0)

user = models.foreignkey(to="

userinfo

",verbose_name="

所屬作者

",null=true,blank=true)

classify = models.foreignkey(to="

classfication

",verbose_name="

所屬類別

",null=true,blank=true)

tags = models.manytomanyfield(to="

tag",through="

article2tag

",through_fields=('

article

', '

tag'),verbose_name="

所屬標籤")

site_article_category = models.foreignkey(to="

sitearticlecategory

",verbose_name="

所屬文章分類

",null=true,blank=true)

class

meta:

verbose_name_plural = "

文章表"

def__str__

(self):

return

self.title

class

tag(models.model):

'''標籤表

'''name = models.charfield(max_length=32,verbose_name="

標籤名"

) blog = models.foreignkey(to="

blog

",verbose_name="

所屬部落格")

class

meta:

verbose_name_plural = "

標籤表"

def__str__

(self):

return

self.name

class

article2tag(models.model):

article = models.foreignkey(verbose_name="

文章",to="

article")

tag = models.foreignkey(verbose_name="

標籤",to="

tag"

)

class

meta:

verbose_name="

文章和標籤關係表

"'''

聯合唯一

'''unique_together =[

("article

","tag")

]def__str__

(self):

return self.article.title + "

"+self.tag.name

像是這樣自己建立的第三張表就屬於是中介模型。一般就django會給我們自動建立第三張表,

人家自己建立的只是有關係字段,不能在增加其他的字段了,

如果根據需求新增其他字段,不需要manytomany自己建立第三張表就自己設定第三張表

這就需要我們自己去建立第三張表。

當然我現在設計的article2tag這個第三張表就可以在裡面新增其他你需要的字段。

如果用了中介模型了,就不能在用add,remove了

為什麼不能這樣做? 這是因為你不能只建立 article和 tag之間的關聯關係,你還要指定 membership模型中所需要的所有資訊;而簡單的add、create 和賦值語句是做不到這一點的。所以它們不能在使用中介模型的多對多關係中使用。此時,唯一的辦法就是建立中介模型的例項。

remove()方法被禁用也是出於同樣的原因。但是clear() 方法卻是可用的。它可以清空某個例項所有的多對多關係:

Django 中介模型

有多對多字段的時候自己建立的第三章表就是中介模型 class article models.model 文章表 title models.charfield max length 64,verbose name 文章標題 summary models.charfield max length 244...

orm之中介模型

中介模型針對的是manytomany 多對多 的時候第三張表的問題,中介模型其實指的就是我們不通過django建立第三張表,如果自己不建立第三張表,而是由django給我們建立,那就不存在中介模型 class book models.model title models.charfield max ...

Orm之中介模型

中介模型針對的是manytomany 多對多 的時候第三張表的問題,中介模型其實指的就是我們不通過django建立第三張表,如果自己不建立第三張表,而是由django給我們建立,那就不存在中介模型 class book models.model title models.charfield max ...