zoukankan      html  css  js  c++  java
  • django中related_name作用

    我们从一个简单的事说起:吃货君到水果摊捡漏买了两种水果,分别是人参果和蟠桃;后来水果摊主冥冥中感觉自己遗失了重宝,似乎和一个100岁的老爷爷有关,翻看自己的收款账单,当看到吃货君的账单时心头一紧,就是他买走了我的宝贝,我就要看看他买了我的什么宝贝! 店主通过吃货君的名字找到了他买的水果,发现竟然有万年蟠桃以及亿年人参过后,嚎啕大哭起来!!!

    吃饭君是走了什么运呢???

    下面我们根据上面的小情节定义两个模型,分别是买主模型以及水果模型,一个买主对应多个水果模型,简单的一对多模型:

    class Buyer(models.Model):
        name = models.CharField(verbose_name='买主名', max_length=10) 
        Alipay_id = models.CharField(verbose_name='支付宝账号') 
        age = models.IntegerField(verbose_name='买主年龄',blank = True)
     
     
    class Fruit(models.Model): 
        buyer = models.ForeignKey(Buyer, related_name='buyer_fruit') 
        fruit_name = models.CharField(verbose_name='水果名', max_length=10) 
        weight = models.FloatField(verbose_name='水果重量')
    View Code

    通常,我们要查询买主买了哪些水果,首先要根据条件找到买主信息,然后根据买主信息找到买主所购买的水果,本例中如下:

    #首先获得水果模型中外键指向的表中对象:
     
    buyer = Buyer.objects.filter(age = 100).first()
     
    #然后通过‘_set’方法获得子表中的数据:
     
    fruits = buyer.fruit_set.all() 
     
    """
    django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。 这个属性的名称默认是以子表的名称小写加上_set()来表示,这里我们的主表是buyer,字表是fruit,所以主表外键的属性就是fruit_set"
    View Code

    上面的fruit_set是django为对象buyer默认创建的外键的属性,个人建议采用自定义的方式定义主表的外键,这样使用时更熟悉一些吧!而related_name就实现这个功能,在字表中定义外键时,增加related_name字段指定这个字表在主表中对应的外键属性, 如下:

    class Fruit(models.Model): 
        buyer = models.ForeignKey(Buyer, related_name='buyer_fruit') 
    """
    主表:buyer
    子表:fruit
    子表在主表中对应的外键属性:related_name='buyer_fruit'
    """
    --------------------- 
    作者:不见天高 
    来源:CSDN 
    原文:https://blog.csdn.net/wuliangtianzu/article/details/82656647 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    View Code

    那么我们就可以通过自定义外键的方式找到需要的信息了:

    #首先获得水果模型中外键指向的表中对象:
     
    buyer = Buyer.objects.filter(age = 100).first()
     
    #然后通过子表中自定义的外键获取子表的所有信息:
     
    fruits = buyer.buyer_fruit.all() 
    View Code
  • 相关阅读:
    VMWare虚拟机15.X局域网网络配置(修改网卡)
    Redis的中并发问题的解决方案小结
    搭建一个dubbo+zookeeper平台
    react与redux学习资料的整理
    如何利用python+Selenium对登录的验证码进行验证?
    (基础篇)哪些面试遇见的坑——面试必看基础题
    测试员小白必经之路----常见的linux操作命令
    测试员小白必经之路----常见的Dos命令
    Elastcisearch.Nest 7.x 系列`伪`官方翻译:通过 NEST 来快捷使用 Elasticsearch
    StackExchange.Redis 系列 1:基础使用
  • 原文地址:https://www.cnblogs.com/liangsha0/p/10995015.html
Copyright © 2011-2022 走看看