[英]how to save multiple Django forms with foreign keys?
我知道之前曾有人问过这个问题,因此我采用了建议的解决方案,但我的代码仍无法正常工作。 我正在尝试保存3种形式,其中一种模型具有其他两种的外键。 我先尝试commit=false
,然后保存,但仍然收到IntegrityError
。 这是回溯的详细信息:
_execute 85中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ backends \\ utils.py”。return self.cursor.execute(sql,参数)
上面的异常(“ poi_id”列中的空值违反了非空约束DETAIL:失败行包含(14,SOME STRING,2019-05-01,media / Live-Oak-Tree-450w_iWBYljS.jpg,null,null)。 )是以下异常的直接原因:
内部34中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ core \\ handlers \\ exception.py”。response = get_response(request)
_get_response 126中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ core \\ handlers \\ base.py”。response = self.process_exception_by_middleware(e,request )
_get_response 124中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ core \\ handlers \\ base.py”。response = wrapd_callback(request,* callback_args, ** callback_kwargs)
观察52中的文件“ C:\\ testBioDjango \\ SpeciesColl \\ polls \\ views.py”。obs.species = species_form.save()
保存458中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ forms \\ models.py”。self.instance.save()
保存718中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ models \\ base.py”。force_update = force_update,update_fields = update_fields)
在save_base 748中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ models \\ base.py”。更新= self._save_table(原始,cls ,force_insert,force_update,使用,update_fields)
_save_table 831中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ models \\ base.py”。result = self._do_insert(cls._base_manager ,使用,字段,update_pk,原始)
_do_insert 869中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ models \\ base.py”。using = using,raw = raw)
在manager_method 82中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ models \\ manager.py”。return getattr(self.get_queryset(),名称)(* args,** kwargs)
_insert 1136中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ models \\ query.py”。return query.get_compiler(using = using) .execute_sql(return_id)
execute_sql 1289中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ models \\ sql \\ compiler.py”。cursor.execute(sql,params )
执行100中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ backends \\ utils.py”。return super()。execute(sql,参数)
执行68中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ backends \\ utils.py”。返回self._execute_with_wrappers(sql,params, many = False,executor = self._execute)
_execute_with_wrappers 77中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ backends \\ utils.py”。return executor(sql,params,many,上下文)
_execute 85中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ backends \\ utils.py”。return self.cursor.execute(sql,参数)
出口 89中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ utils.py”。从exc_value提高dj_exc_value.with_traceback(traceback)
_execute 85中的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python37-32 \\ lib \\ site-packages \\ django \\ db \\ backends \\ utils.py”。return self.cursor.execute(sql,参数)
异常类型:/ polls / observe /处的IntegrityError异常值:“ poi_id”列中的空值违反了非空约束详细信息:失败行包含(14,SOME STRING,2019-05-01,media / Live-Oak-Tree- 450w_iWBYljS.jpg,null,null)。
分配表单时,您要交换它们的名称:
species_form = ObservationForm(request.POST, request.FILES)
那是出问题的地方。
您自己是如何看待的:如Daniel所指出的那样,错误跟踪显示该错误发生在species_form.save()
(在错误跟踪中查找具有您自己的代码路径而不是python路径的行。 / site-packages / django / ...)。 但是进一步往下看,您可以看到失败行的值: (14, SOME STRING, 2019-05-01, media/Live-Oak-Tree-450w_iWBYljS.jpg, null, null)
显然是指Observation
模型。 因此, species_form
保存了错误的模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.