Django中related_name的用法
Django中的orm在处理外键时,会将外键指向的类lower并拼接一个"_set"来找出该外键对象的set集。举个例子。
class Poi(models.Model):
name = models.CharField(max_length=14,null=True)
class TravelPlan(models.Model):
startPoi = models.ForeignKey("Poi",null=True,on_delete=models.SET_NULL)
这样当通过Poi来获取所有相关的TravelPlan时,可以通过以下代码
p = Poi.objects.get(id=1)
p.travelplan_set.all()
但是如果TravelPlan中有两个Poi外链时,p.travelplan_set无法对应是哪一个,如下
class TravelPlan(models.Model):
startPoi = models.ForeignKey("Poi",null=True,on_delete=models.SET_NULL)
endPoi = models.ForeignKey("Poi",null=True,on_delete=models.SET_NULL)
所以需要在设置外链时给一个related_name,使用来代替默认规则自动生成的"_set"
class TravelPlan(models.Model):
startPoi = models.ForeignKey("Poi",null=True,on_delete=models.SET_NULL,related_name="startpoi")
endPoi = models.ForeignKey("Poi",null=True,on_delete=models.SET_NULL,related_name="endpoi")
使用时
p = Poi.objects.get(id=1)
p.startpoi.all()
p.endpoi.all()
版权属于:邢迪的平行时空
本文链接:https://xingdi.me/archives/81.html
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可