2024-04-26 04:20:33 发布
网友
对于ManyToManyField和ForeignKey字段,related_name参数有什么用处?例如,给定以下代码,related_name='maps'的效果是什么?
ManyToManyField
ForeignKey
related_name
related_name='maps'
class Map(db.Model): members = models.ManyToManyField(User, related_name='maps', verbose_name=_('members'))
如果模型中有两个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')
否则就不起作用(至少在2FK的情况下,我不能将相关名称的用法跳过到同一个表中)
如果有更复杂的相关类名,related_name参数也很有用。例如,如果您有外键关系:
class UserMapDataFrame(models.Model): user = models.ForeignKey(User)
为了从相关的User访问UserMapDataFrame对象,默认调用将是User.usermapdataframe_set.all(),这很难读取。
User
UserMapDataFrame
User.usermapdataframe_set.all()
使用related_name可以指定一个更简单或更易读的名称来获得相反的关系。在这种情况下,如果指定user = models.ForeignKey(User, related_name='map_data'),则调用将是User.map_data.all()。
user = models.ForeignKey(User, related_name='map_data')
User.map_data.all()
如果模型中有两个FK指向同一个表,则必须添加到现有的与应答相关的名称。例如,如果是物料清单
所以当你需要访问这些数据时 只能使用相关名称
否则就不起作用(至少在2FK的情况下,我不能将相关名称的用法跳过到同一个表中)
如果有更复杂的相关类名,
related_name
参数也很有用。例如,如果您有外键关系:为了从相关的
User
访问UserMapDataFrame
对象,默认调用将是User.usermapdataframe_set.all()
,这很难读取。使用
related_name
可以指定一个更简单或更易读的名称来获得相反的关系。在这种情况下,如果指定user = models.ForeignKey(User, related_name='map_data')
,则调用将是User.map_data.all()
。相关问题 更多 >
编程相关推荐