好的,所以经过一些搜索后,根据我的判断,没有相关问题可以解决我的具体问题。我显然不明白他们是否这样做,所以我为任何冗余而道歉。
这是我的追溯:
追踪(最近一次通话): 文件" 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建议。
答案 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可能对您有所帮助。