繁体   English   中英

如何用外键保存多个Django表单?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM