zoukankan      html  css  js  c++  java
  • 数据库表关系

    一对多:

    • 数据库:article_article内容:
    • 一对多关联操作:
      1 def one_to_many_view(request):
      2     article = Article(title='西游记',content='abc...')
      3     category = Category.objects.first()
      4     author = FrontUser.objects.first()
      5     article.category = category
      6     article.author = author
      7     article.save()
      8     return HttpResponse('success')
       1 # Article模型使用外键引用Category模型时,会使Category自动生成一个article_set的方法(可用related_name改名);
       2 # models.py>>>Article模型: category = models.ForeignKey('Category',on_delete=models.CASCADE,null=True,related_name='articles')
       3 #获取分类category的第一条数据,可使用article_set的方法获取该数据所对应的文章;
       4 category = Category.objects.first()
       5 #获取一条数据:
       6 article = category.article_set.first()
       7 print(article)
       8 >>> < Article: (id:1, title:百年孤独) >
       9 #获取多条数据(改名为:articles):
      10 articles = category.articles.all()
      11 for article in articles:
      12     print(article)
      13 >>> <Article:(id:1,title:百年孤独)>
      14 >>> <Article:(id:3,title:西游记)>
      1 # 要添加数据后再将其添加到分类中时,当article_article数据库表中的category_id不为null时,使用‘bulk=False’确保在
      2 # 添加时同时将article的数据进行保存,后将category的数据进行保存,使其运行时不造成冲突;
      3 article = Article(title='三国演义',content='123...')
      4 article.author = FrontUser.objects.first()
      5 category.articles.add(article,bulk=False)
      6 return HttpResponse('success')

    二、一对一:

    • 一对一关联操作:
      1 # 使用model.OneToOneField 外键,school只能传入一个唯一的值;
      2 class UserExtension(models.Model):
      3     school = models.CharField(max_length=100)
      4     user = models.OneToOneField('FrontUser',on_delete=models.CASCADE)
       1 #models.One_To_OneField对应的方法为引用的模块名小写,没有 “_set”
       2 def one_to_one(request):
       3     #获取frontuser对应的值:
       4     extension =UserExtension.objects.first()
       5     print(extension.user)
       6     >>> < FrontUser: (id:1, username:陈) >
       7 
       8     #获取userextension对应的值:
       9     user = FrontUser.objects.first()
      10     print(user.userextension)
      11     >>> < UserExtension: (id:1, school:新东方, user_id:1) >
      12 
      13     return HttpResponse('success')

    三:多对多:

    • 数据库会增加一个 article_tag_article 的中间文件:

    • 关联操作:
      1 #一篇文章有多个标签
      2 def many_to_many(request):
      3     article = Article.objects.first()
      4     #tag = Tag(name='热门文章')
      5     tag = Tag(name='爆冷文章')
      6     # Many_To_Many没有‘bulk=False’,需调用save()保存;
      7     tag.save()
      8     article.tag_set.add(tag)
      1 #一个标签有多篇文章
      2 def many_to_many(request):
      3     tag = Tag.objects.get(pk=1)
      4     article = Article.objects.get(pk=3)
      5     # 将article添加到tag中
      6     tag.articles.add(article)
      7     return HttpResponse('success')
  • 相关阅读:
    String.PadLeft()
    数据生成树 新增
    SQL允许你用EXECUTE执行一个变量中定义的SQL语句,并且允许你在被执行的SQL语句中,再次嵌套入一个变量定义的语句,并且再次在其中用EXECUTE执行它
    获取SqlConnection的统计信息
    页面缓存 OutputCache
    将小写金额转换成大写
    判断是否枚举中的匹配项
    js获取系统时间的几种方法<一> 《网摘学习》
    将指定文件夹(路径)下的所有内容copy到目标文件夹(路径)下的方法
    50个优美的句子<摘自网上>
  • 原文地址:https://www.cnblogs.com/liqiongming/p/10482448.html
Copyright © 2011-2022 走看看