3 回答
TA贡献1921条经验 获得超9个赞
该related_name
属性指定从User
模型返回到模型的反向关系的名称。
如果不指定related_name
,Django会自动使用一个带有后缀的型号的名称创建_set
,例如User.map_set.all()
。
如果不指定,例如related_name=maps
在User
模型中,User.map_set
仍然可以工作,但User.maps.
语法显然有点清洁,少笨重; 例如,如果您有一个用户对象current_user
,则可以使用该模型current_user.maps.all()
获取与之Map
关系的所有模型实例current_user
。
该Django文档有更多的细节。
TA贡献1942条经验 获得超3个赞
要添加到现有答案相关名称是必须的,以防模型中有2个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')
它没有其他工作(至少我无法跳过相同名称的使用,如果2 FK到同一个表。)
TA贡献1816条经验 获得超4个赞
related_name
如果您有更复杂的相关类名,则该参数也很有用。例如,如果您有外键关系:
class UserMapDataFrame(models.Model): user = models.ForeignKey(User)
为了UserMapDataFrame
从相关对象访问对象User
,默认调用将User.usermapdataframe_set.all()
是非常难以阅读的。
使用related_name
允许您指定更简单或更易读的名称以获得反向关系。在这种情况下,如果您指定user = models.ForeignKey(User, related_name='map_data')
,则调用将是User.map_data.all()
。
添加回答
举报