【发布时间】:2019-06-12 15:59:37
【问题描述】:
我不知道为什么:makemigrations 命令工作正常,但是当我从浏览器插入内容时,终端输出错误消息...
文件 “D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\backends\mysql\operations.py”,第 172 行,在 validate_autopk_value raise ValueError('The database backend does not accept 0 as a ' ValueError: The database backend does not accept 0 as a value for 自动字段。
在我的笔记/models.py中
class notecategory(models.Model):
categoryname = models.CharField(max_length=150,null=False,default="")
isPublic = models.BooleanField()
owner = models.ForeignKey(User,on_delete=models.CASCADE,null=True,related_name='%(class)s_requests_created')
class note2(models.Model):
category = models.ForeignKey(notecategory,on_delete=models.CASCADE,null=True)
content = models.CharField(max_length =settings.CONSTANT_DICT['noteContentLen'] ,null=True)
book = models.ForeignKey(book,on_delete=models.CASCADE,null=True)
chapter = models.ForeignKey(chapter,on_delete=models.CASCADE,null=True)
sentence = models.ForeignKey(sentence,on_delete=models.CASCADE,null=True)
anchorAt = models.IntegerField(null=True)
highlightLen = models.IntegerField(null=True)
language = models.ForeignKey(language,on_delete=models.CASCADE, null=True)
owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True,related_name='%(class)s_requests_created')
在我的笔记/views.py中
toSave = note2(book_id=int(bookId),chapter=chapterInstance, sentence_id = int(sentenceId),
category_id=int(categoryId), content=userInputNoteContent,anchorAt = int(anchorAt),highlightLen=int(highlightLen),
language=languageInstance,
owner=userInstance)
toSave.save()
在 note/migrations/001_initial.py 中
class Migration(migrations.Migration):
initial = True
dependencies = [
('sentence', '0008_auto_20190118_1608'),
('language', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='note2',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content', models.CharField(max_length=150, null=True)),
('anchorAt', models.IntegerField(null=True)),
('highlightLen', models.IntegerField(null=True)),
('book', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='sentence.book')),
],
),
migrations.CreateModel(
name='notecategory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('categoryname', models.CharField(default='', max_length=150)),
('isPublic', models.BooleanField()),
('owner', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notecategory_requests_created', to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='note2',
name='category',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='note.notecategory'),
),
migrations.AddField(
model_name='note2',
name='chapter',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='sentence.chapter'),
),
migrations.AddField(
model_name='note2',
name='language',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='language.language'),
),
migrations.AddField(
model_name='note2',
name='owner',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='note2_requests_created', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='note2',
name='sentence',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='sentence.sentence'),
),
]
完整跟踪 我从另一个类似的模型/应用中粘贴了错误,因为我没有复制原始消息
[2019 年 1 月 18 日 19:46:47] "GET /readbook/?HTTP/1.1" 200 5809 内部服务器错误:/savenote/ 回溯(最近一次通话最后): 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\core\handlers\exception.py", 第 34 行,在内部 响应 = get_response(请求) 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\core\handlers\base.py", 第 126 行,在 _get_response 中 response = self.process_exception_by_middleware(e, request) 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\core\handlers\base.py", 第 124 行,在 _get_response 响应 = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“D:\pythonworkspace\notetaking\read\views.py”,第 143 行,在 savenote 中 toSave.save() 文件“D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\base.py”,第 717 行,保存 force_update=force_update,update_fields=update_fields) 文件“D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\base.py”,第 747 行,在 save_base 更新 = self._save_table(raw, cls, force_insert, force_update, using, update_fields) _save_table 中的文件“D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\base.py”,第 830 行 结果 = self._do_insert(cls._base_manager, using, fields, update_pk, raw) 文件“D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\base.py”,第 868 行,在 _do_insert 使用=使用,原始=原始) 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\manager.py", 第 82 行,在 manager_method 中 返回 getattr(self.get_queryset(), name)(*args, **kwargs) 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\query.py", 第 1133 行,在 _insert 中 return query.get_compiler(using=using).execute_sql(return_id) 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\sql\compiler.py", 第 1284 行,在 execute_sql 中 对于 sql,self.as_sql() 中的参数: 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\sql\compiler.py", 第 1237 行,在 as_sql 中 对于 self.query.objs 中的 obj 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\sql\compiler.py", 第 1237 行,在 对于 self.query.objs 中的 obj 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\sql\compiler.py", 第 1236 行,在 [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields] 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\sql\compiler.py", 第 1178 行,在 prepare_value 中 value = field.get_db_prep_save(value, connection=self.connection) 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\fields\related.py", 第 937 行,在 get_db_prep_save 中 返回self.target_field.get_db_prep_save(值,连接=连接) 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\fields__init__.py", 第 790 行,在 get_db_prep_save return self.get_db_prep_value(value, connection=connection,prepared=False) 文件 "D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\models\fields__init__.py", 第 957 行,在 get_db_prep_value value = connection.ops.validate_autopk_value(value) 文件“D:\software\WinPython-64bit-3.5.4.0Qt5\python-3.5.4.amd64\lib\site-packages\django\db\backends\mysql\operations.py”,第 172 行,在 validate_autopk_value raise ValueError('数据库后端不接受 0 作为 ' ValueError: 数据库后端不接受 0 作为 AutoField 的值。
【问题讨论】:
-
你将notecategory id设置为0?
-
请向我们展示完整错误回溯。
-
谢谢;我已经编辑过了。我从另一个类似的模型/应用程序中粘贴了错误,因为我没有复制原始消息。我不知道如何很好地制作stackoverflow格式。
-
@ShafikurRahman notecategory id 从 1 开始。我发现我的 sentence_id 被分配为 0。这有关系吗?
-
是的。 sentence_id 外键,它不是 0