禁止使用save()来防止由于未保存的相关对象而导致的数据丢失Django 1.10

时间:2017-01-07 19:08:36

标签: django python-3.x

好的,所以经过一些搜索后,根据我的判断,没有相关问题可以解决我的具体问题。我显然不明白他们是否这样做,所以我为任何冗余而道歉。

这是我的追溯:

  

追踪(最近一次通话):    文件" csvimport.py",第79行,in      f.save()    文件" /home/blake/django_/venv/lib/python3.5/site-> packages / django / db / models / base.py",第752行,保存      "未保存的相关对象'%s'。" %field.name   ValueError:save()禁止使用未保存的相关>对象'飞机来防止数据丢失。

这是有问题的脚本:http://pastebin.com/Jks0HgEr

这些是我的模特:http://pastebin.com/uGUqckqS

我无法说明为什么函数assignAircraft()在第56行调用时不会保存Aircraft.aircraft_type对象

奇怪的是,行[1]的第一个实例正被保存到飞机模型中。

此外,欢迎任何改进/ pep8建议。

1 个答案:

答案 0 :(得分:0)

我想指出函数的返回对象assignAircraft

def assignAircraft(row_id):
    if aircraft_queryset.filter(aircraft_type = row_id).exists():
        pass
    else:
        a = Aircraft(
            aircraft_type = row_id,
        )
        a.save()
    return Aircraft(aircraft_type = row_id)

此函数不返回已保存的实例,而是返回临时实例Aircraft(aircraft_type = row_id)

您应该返回已保存的实例a,或者如果没有现有项目,则必须返回一些内容。

def assignAircraft(row_id):
    if aircraft_queryset.filter(aircraft_type=row_id).exists():
        # DO SOMETHING AND RETURN SOMETHING
    else:
        a = Aircraft(aircraft_type=row_id)
        a.save()
        return a

IMO,get_or_create manager function可能对您有所帮助。