Django自定义save()函数中无法访问heat_set问题求助
Django ManyToMany关联访问报错解决方法
问题根源
你在Game模型中将ManyToMany字段命名为heat,却尝试用heat_set来访问关联对象——这是混淆了正向与反向关联的访问方式。_set后缀是反向关联的默认命名规则(从关联模型访问当前模型时使用),而在当前模型内部访问自己定义的ManyToMany字段,直接用字段名即可。
修正后的代码
class Game(models.Model): heat = models.ManyToManyField(Heat) # ... 其他字段定义 def save(self, *args, **kwargs): super().save(*args, **kwargs) # 直接使用字段名heat访问关联对象 for heat in self.heat.all(): # ... 你的计算与存储逻辑
额外说明
如果需要从Heat模型反向访问关联的Game对象,默认可以用heat.game_set.all()。若想自定义反向关联的名称,可在定义ManyToManyField时指定related_name参数:
heat = models.ManyToManyField(Heat, related_name='games')
之后在Heat实例中就能通过heat.games.all()来获取关联的Game对象。
内容的提问来源于stack exchange,提问作者Tom Ribbens
相关产品推荐
相关产品推荐

