Django 第十课 3.ORM表关系

Posted nelsen-chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 第十课 3.ORM表关系相关的知识,希望对你有一定的参考价值。

#表关系

 

## 一对多:

1:应用场景:比如文章和作者之间的关系。一个文章只能由一个作者编写,但是一个作者可以写多篇文章。文章和作者之间的关系就是典型的多对一的关系。

2:实现方式:一对多或者多对一,都是通过 ‘ForeignKey’ 来实现的。还是以文章和作者的案例进行讲解。

class User(models.Model):
    username = models.CharField(max_length=20)
    password  = models.CharField(max_length=100)


class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    category = models.ForeignKey("Category", on_delete=models.CASCADE)
    author = models.ForeignKey("frontuser.FrontUser", on_delete=models.CASCADE, null=True)

 

那么以后再给 ‘Article’ 对象指定 ‘author’,就可以使用以下代码来完成:

article = Article(title=abc, content=123)
author = User(username=zhiliao, password=123456)

#要先保存到数据库中
author.save()
article.author = author
article.save()

 

并且以后如果想要获取某个用户下所有的文章,可以通过 ‘article_set’ 来实现

user = User.objects.first()
#获取第一个用户写的文章
articles = user.article_set.all()

for article in articles:
     print(article)

 

并且如果想要将文章添加到某个分类中,可以使用一下的方式:

category = Category.objects.first()

article = Article(title=bbb, content=vvv)
article.author = FrontUser.objects.first()

category.article_set.add(article, bulk=False)

* 使用 ‘bulk=False’,那么Django会自动的保存article,而不需要再添加到category之前先保存article。

* 或者是另外一种解决方式是,在添加到 ‘category.article_set’ 中之前,先将 ‘article‘ 保存到数据库中。但是如果 ‘article.category’不能为空,那么就产生一种死循环了。 article没有 ‘category‘不能保存,而将article添加到 ‘category.article_set’中,又需要article之前是已经存储到数据中。

* 如果是上面的那种需求,建议使用 ‘bulk=False’

 

以上是关于Django 第十课 3.ORM表关系的主要内容,如果未能解决你的问题,请参考以下文章

Django 第十课 1.ORM模型

Django 第十课 4.ORM查询操作

第十课笔记

对ORM的理解

Django开发:(3.1)ORM:单表操作

python第十课