【发布时间】:2016-02-05 06:47:06
【问题描述】:
我的模型与另一个模型具有多对多关系。 我正在尝试在保存时更新多对多关系,但没有添加任何内容。
通过 Python 解释器创建一个新航班,保存它,然后运行我在“保存”方法中的循环,将正确的通道添加到多对多关系中。
我在覆盖的保存方法中缺少什么?
class Flight(models.Model):
number_of_lanes = models.PositiveSmallIntegerField()
start_time = models.TimeField()
lanes = models.ManyToManyField(Lane, blank=True)
tournament = models.ForeignKey('Tournament')
def __unicode__(self):
return u'Lanes: %s | Start: %s' % (self.number_of_lanes, self.start_time)
def save(self, *args, **kwargs):
super(Flight, self).save(*args, **kwargs)
for i in range(1, self.number_of_lanes+1):
lane = Lane.objects.get(id=i)
self.lanes.add(lane)
这是我测试它的控制台 sn-p:
>>> flight = Flight()
>>> flight.number_of_lanes=5
>>> flight.start_time='8:30'
>>> flight.tournament=t
>>> flight.save()
>>> flight.lanes.all()
[<Lane: 1>, <Lane: 2>, <Lane: 3>, <Lane: 4>, <Lane: 5>]
编辑: 关于我在这方面的简要更新。
save 方法在控制台中工作。第一次测试时,忘记重新加载 Django shell。从管理页面添加时,仍未创建多对多关系。 如果覆盖的 save 方法在 shell 中工作,它不应该在 Django 管理页面上工作吗?
【问题讨论】:
-
我怀疑虽然您正在向航班添加车道,但实际上您将 number_of_lanes 设置为 0。您可以添加一个带有您正在测试的完整示例的 sn-p 吗?也许这就是错误所在。
-
@Sebastian 即使 number_of_lanes 为 0,他也在添加 +1
-
@Gocht 是的。 range(1,1) 是一个空集。我在循环代码中没有看到错误,这就是我怀疑测试的原因。
-
@Sebastian 他从 1 开始,我没看到。当您确定 number_of_lanes > 0 时尝试测试
-
@Gocht 我已经尝试在范围内使用大于 0 的硬编码值进行测试,但在保存方法期间仍未添加多对多字段。
标签: python django django-models