在Django中使用的related_name是什么?
什么是ManyToManyField
和ForeignKey
字段有用的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=maps
, User.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的情况下相同的表)。