Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django覆盖默认保存添加多个_Python_Django_Django Models - Fatal编程技术网

Python Django覆盖默认保存添加多个

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

我有一个与另一个模型有多对多关系的模型。 我试图在保存时更新多对多关系,但没有添加任何内容

通过Python解释器创建一个新的航班,保存它,然后运行“save”方法中的循环,为多对多关系添加正确的通道

重写的save方法中缺少什么

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方法期间仍然没有添加多对多字段。