django中related_name作用

django框架 2020-02-04 1698

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

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='水果重量')  

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

#首先获得水果模型中外键指向的表中对象:

buyer = Buyer.objects.filter(age = 100).first()  

#然后通过‘_set’方法获得子表中的数据:  

fruits = buyer.fruit_set.all()   

"""  
django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。 这个属性的名称默认是以子表的名称小写加上_set()来表示,这里我们的主表是buyer,字表是fruit,所以主表外键的属性就是fruit_set  
"""  

上面的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'  
"""  

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

#首先获得水果模型中外键指向的表中对象:  
buyer = Buyer.objects.filter(age = 100).first()  
#然后通过子表中自定义的外键获取子表的所有信息:  
fruits = buyer.buyer_fruit.all()  

转载链接:https://blog.csdn.net/wuliangtianzu/article/details/82656647

标签:django框架

文章评论

评论列表

已有0条评论