Python Django覆盖默认保存添加多个
我有一个与另一个模型有多对多关系的模型。 我试图在保存时更新多对多关系,但没有添加任何内容 通过Python解释器创建一个新的航班,保存它,然后运行“save”方法中的循环,为多对多关系添加正确的通道 重写的save方法中缺少什么Python Django覆盖默认保存添加多个,python,django,django-models,Python,Django,Django Models,我有一个与另一个模型有多对多关系的模型。 我试图在保存时更新多对多关系,但没有添加任何内容 通过Python解释器创建一个新的航班,保存它,然后运行“save”方法中的循环,为多对多关系添加正确的通道 重写的save方法中缺少什么 class Flight(models.Model): number_of_lanes = models.PositiveSmallIntegerField() start_time = models.TimeField() lanes = m
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)
下面是我测试它的控制台代码段:
>>> 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>]
>>飞行=飞行()
>>>航班。车道数=5
>>>航班。开始时间为8:30
>>>飞行比赛=t
>>>flight.save()
>>>航班,跑道,全部
[, , ]
编辑:
简要介绍我在这方面的最新情况
save方法在控制台中工作。第一次测试时,我忘记重新加载Django shell。从管理页面添加时,仍然没有创建多对多关系。
如果重写的save方法在shell中工作,那么它不应该在Django管理页面上工作吗?您应该看看。它基本上描述了当您通过管理表单保存模型时,它不是一个原子事务
首先保存主对象,然后清除M2M并创建新对象
值设置为表单中的任何内容。所以如果你在
您所在的机会窗口中的主对象的save(),其中
M2M尚未更新。事实上,如果你想做点什么
在M2M中,更改将被清除()
我怀疑,虽然您正在为航班添加车道,但实际上您正在将车道数设置为0。您能否添加一个包含您正在测试的完整示例的代码片段?塞巴斯蒂安补充道:“也许错误就在这里。”即使车道数为0+1@Gocht是的。范围(1,1)是一个空集。我没有看到循环代码中有错误,这就是我怀疑测试的原因。@Sebastian他从1开始,我没有看到。当您确定\u车道数>0@Gocht我尝试过使用范围内大于0的硬编码值进行测试,但在save方法期间仍然没有添加多对多字段。