我知道之前已经有人问过这个问题,因此我采用了建议的解决方案,但是我的代码仍然无法正常工作。我正在尝试保存3种形式,其中一种模型具有其他两种的外键。我先尝试commit=false
,然后保存,但仍然得到IntegrityError
。以下是追溯的详细信息:
_execute中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py” 85. return self.cursor.execute(sql,params)
上述异常(“ poi_id”列中的空值违反了非空约束 详细信息:失败行包含(14,SOME STRING,2019-05-01,media / Live-Oak-Tree-450w_iWBYljS.jpg,null,null)。 )是以下异常的直接原因:
内部的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ handlers \ exception.py” 34. response = get_response(request)
_get_response中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ handlers \ base.py” 126. response = self.process_exception_by_middleware(e,request)
_get_response中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ handlers \ base.py” 124. response = wrapd_callback(request,* callback_args,** callback_kwargs)
观察中的文件“ C:\ testBioDjango \ SpeciesColl \ polls \ views.py” 52. obs.species = species_form.save()
保存文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ forms \ models.py” 458. self.instance.save()
保存文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ base.py” 718. force_update = force_update,update_fields = update_fields)
save_base中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ base.py” 748.更新= self._save_table(原始,cls,force_insert,force_update,使用,update_fields)
_save_table中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ base.py” 831. result = self._do_insert(cls._base_manager,using,fields,update_pk,raw)
_do_insert中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ base.py” 869. using = using,raw = raw)
manager_method中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ manager.py” 82. return getattr(self.get_queryset(),name)(* args,** kwargs)
_insert中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ query.py” 1136. return query.get_compiler(using = using).execute_sql(return_id)
execute_sql中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ models \ sql \ compiler.py” 1289. cursor.execute(sql,params)
在执行文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py” 100. return super()。execute(sql,params)
在执行文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py” 68. return self._execute_with_wrappers(sql,params,many = False,executor = self._execute)
_execute_with_wrappers中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py” 77. return executor(sql,params,many,context)
_execute中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py” 85. return self.cursor.execute(sql,params)
退出中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ utils.py” 89.从exc_value提高dj_exc_value.with_traceback(traceback)
_execute中的文件“ C:\ Users \ user \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ utils.py” 85. return self.cursor.execute(sql,params)
异常类型:/ polls / observe /处的IntegrityError 异常值:“ poi_id”列中的空值违反了非空约束 详细信息:失败行包含(14,SOME STRING,2019-05-01,media / Live-Oak-Tree-450w_iWBYljS.jpg,null,null)。
答案 0 :(得分:1)
分配表格时,您正在交换表格的名称:
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
保存了错误的模型。