在Django中使用的related_name是什么?

什么是ManyToManyFieldForeignKey字段有用的related_name参数? 例如,给定以下代码, related_name='maps'的效果是什么?

 class Map(db.Model): members = models.ManyToManyField(User, related_name='maps', verbose_name=_('members')) 

related_name属性指定从User模型返回到模型的反向关系的名称。

如果您不指定related_name ,Django会自动使用名称为_set的后缀User.map_set.all()例如User.map_set.all()创build一个名称。

如果你确实指定了User.map_set related_name=mapsUser.map_set仍然可以工作,但User.maps. 语法显然有点干净,笨重; 例如,如果你有一个用户对象current_user ,你可以使用current_user.maps.all()来获得你的Map模型的所有与current_user有关系的实例。

Django文档有更多的细节。

如果模型中有两个指向同一个表的FK,则必须添加到现有答案相关的名称。 例如在物料清单的情况下

 @with_author class BOM(models.Model): name = models.CharField(max_length=200,null=True, blank=True) description = models.TextField(null=True, blank=True) tomaterial = models.ForeignKey(Material, related_name = 'tomaterial') frommaterial = models.ForeignKey(Material, related_name = 'frommaterial') creation_time = models.DateTimeField(auto_now_add=True, blank=True) quantity = models.DecimalField(max_digits=19, decimal_places=10) 

所以当你需要访问这些数据时,你只能使用相关的名字

  bom = material.tomaterial.all().order_by('-creation_time') 

这是不工作,否则(至less我不能跳过相同的名字使用2 FK的情况下相同的表)。