Django:ForeignKey、多對(duì)一

Article

ForeignKey和ManyToManyField

class User(models.Model):
    SEX_CHOICE = (('M','male'), ('F','female'),)
    username = models.CharField('用戶名',primary_key=True, max_length=30)
    password = models.CharField('密碼',max_length=30)
    sex = models.CharField('性別',max_length=10,choices=SEX_CHOICE)

class Article(models.Model):
    content = models.TextField(null=True, blank=True)
    user = models.ForeignKey(User,on_delete=models.CASCADE, related_name='article')

class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comment')
    article = models.ManyToManyField(Article, related_name='comment')
    content = models.TextField()

ForeignKey(多對(duì)一)

使用:

#創(chuàng)建含F(xiàn)oreignKey對(duì)象:
user = User.objects.get(username="mandajc666")  #get使用時(shí)最好用try?到時(shí)候查查ifairy2
article = Article.objects.create(user=user, content="test") 

ForeignKey在插入數(shù)據(jù)時(shí)要將外鍵屬性作為屬性之一,如user

#以下是創(chuàng)建后數(shù)據(jù)庫(kù)的結(jié)果:
id  content user_id
7   test    mandajc666
#以下是相關(guān)操作
article.user    #獲取關(guān)聯(lián)用戶對(duì)象
Out[7]: <User: User object (mandajc666)>
article.user.pk #獲取關(guān)聯(lián)用戶對(duì)象的屬性值
Out[10]: 'mandajc666'

ManyToManyField(多對(duì)多)

使用:

#創(chuàng)建含ManyToManyField對(duì)象:
article = Article.objects.create(user=user, content="test") 
comment = Comment.objects.create(user=user,content="testtest")
article.comment.add(comment)    #或comment.article.add(article)

ManyToManyField在插入數(shù)據(jù)時(shí)不能將該屬性作為聲明屬性之一,因?yàn)閿?shù)據(jù)表中根本沒(méi)有這一列,django是在數(shù)據(jù)庫(kù)中新建一個(gè)表“模塊名_comment_article”來(lái)替代這一列,所以article.comment.add(...)的comment是models中定義的related_name(反向),同理,comment.article.add(...)的article就是Comment中的屬性值article

#以下是創(chuàng)建后article_comment_article的結(jié)果:
id  comment_id  article_id
2   2   7
#以下是相關(guān)操作
article.comment.filter(user_id="mandajc666")    #正常增刪改查,和前面外鍵article.user一樣,獲取的是對(duì)象,然后通過(guò).訪問(wèn)它們的屬性值
Out[18]: <QuerySet [<Comment: Comment object (2)>]>
comment.article.filter(user_id="mandajc666")    #反向查詢
Out[19]: <QuerySet [<Article: Article object (7)>]>

待測(cè)試:count

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ios原生方法和h5相互調(diào)用的實(shí)現(xiàn)
    碼農(nóng)淏閱讀 2,142評(píng)論 0 0
  • 年初各大APP開(kāi)始給用戶做盤(pán)點(diǎn),然后朋友圈就天天被刷屏。其中被刷屏最厲害的一次,應(yīng)該就是支付寶的年度盤(pán)點(diǎn)吧。每個(gè)人...
    Ourdays閱讀 932評(píng)論 0 1
  • 下來(lái)大巴車(chē)才發(fā)現(xiàn)丟了一個(gè)包包。 這個(gè)包包是今年暑假里,參加陜西師范大學(xué)學(xué)習(xí)培訓(xùn)時(shí)發(fā)的,上面印有陜西師范大學(xué)的字樣,...
    澠池3112王莉莉閱讀 578評(píng)論 6 5
  • 今晚跟室友去山上走路無(wú)意中聊起高中暑假在鎮(zhèn)上鞋廠打工的經(jīng)歷,好多年前的事情,被丟在腦后這么久,我都差點(diǎn)忘了,...
    Miya姑娘閱讀 276評(píng)論 0 0
  • 暑假越來(lái)越近了,女兒開(kāi)始盼望著回外婆家。外婆家是她最向往的地方,超過(guò)任何游樂(lè)場(chǎng)和旅游勝地。她外婆家在千里之外的一個(gè)...
    Coco寧波閱讀 856評(píng)論 8 9

友情鏈接更多精彩內(nèi)容