zoukankan      html  css  js  c++  java
  • 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’

  • 相关阅读:
    mingw-gcc-9.0.1-i686-posix-sjlj-201903
    MSYS 编译 nginx rtmp-module
    MinGW GCC 8.3.1 2019年2月23日 出炉啦
    城市区号SQL
    HCN网络技术实验指南2
    HCN网络技术实验指南1
    CCNA实验攻略1:配置Cisco交换机
    HCDA-7-配置ssh远程管理
    HCDA-6-配置telnet远程管理
    4.1 子网划分基础
  • 原文地址:https://www.cnblogs.com/nelsen-chen/p/9541203.html
Copyright © 2011-2022 走看看