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)>]>