我试图使用cbv的im来保存对象,但我尝试使用create视图保存对象,但得到了以下错误:
“NULL约束失败: forum_question.user_id”
我将感谢初学者友好地解释如何解决这个问题,也许还有提示,谢谢!
models.py:
class Question(VoteModel, models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=30)
detail = models.TextField()
tags = models.TextField(default='')
add_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.titleforms.py:
class QuestionForm(ModelForm):
class Meta:
model = Question
fields = ['title', 'detail', 'tags']views.py:
class AskForm(CreateView):
def post(self):
user = self.request.user
model = Question
form_class = QuestionForm
template_name = 'forum/ask-question.html'
if form_class.is_valid():
form_class.save()例外?:

编辑3:

额外信息:
追溯(最近一次调用):文件"/home/titanium/.local/lib/python3.8/site-packages/django/core/handlers/exception.py",行47,在内部响应=get_response(请求)文件"/home/titanium/.local/lib/python3.8/site-packages/django/core/handlers/base.py",行181中,在_get_response response = wrapped_callback(request,*callback_args,)文件"/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/base.py",第69行,在调度返回处理程序(请求,*args,*args)中,查看返回self.dispatch(请求,*args,**kwargs)文件"/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/base.py",行101**kwargs)文件"/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/edit.py",行174,在post返回超级().post(请求,*args,**kwargs)文件"/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/edit.py",行144,在post返回文件(表单) "/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/edit.py",第127行,在form_valid self.object = form.save()文件"/home/titanium/.local/lib/python3.8/site-packages/vote/models.py",第466行,在保存self.instance.save()文件“/home/titanium/.local/lib/python3.8/site-packages/vote/models.py”,第67行,在保存超级( "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/base.py",,self).save(*args,**kwargs)文件第743行中,在保存self.save_base(using=using,force_insert=force_insert,File "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/base.py",第780行)中,在"/home/titanium/.local/lib/python3.8/site-packages/django/db/models/base.py",save_base = self._save_table(文件save_base第885行)中,在_save_table结果= self._do_insert(cls._base_manager,raw,字段,returning_fields,raw)中,文件"/home/titanium/.local/lib/python3.8/site-packages/django/db/models/base.py",行923,在"/home/titanium/.local/lib/python3.8/site-packages/django/db/models/manager.py",返回manager._insert(文件_do_insert第85行)中,在manager_method返回getattr(self.get_queryset(),name)(*args,**kwargs)文件"/home/titanium/.local/lib/python3.8/site-packages/django/db/models/query.py",行1301,在返回query.get_compiler(using=using).execute_sql(returning_fields)文件"/home/titanium/.local/lib/python3.8/site-packages/django/db/models/sql/compiler.py",第1441行,在execute_sql cursor.execute(sql,params)文件"/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py",第99行,在执行返回超级().execute(sql,文件"/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py",第67行,在执行返回self._execute_with_wrappers(sql,params,many=False,executor=self._execute)文件"/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py",第76行中,在_execute_with_wrappers返回执行器(_execute_with_wrappers,params,多,(上下文)文件"/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py",行85,在_execute返回self.cursor.execute(sql,params)文件self.cursor.execute第90行中,在从"/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py",文件"/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py",行85、_execute返回self.cursor.execute(sql,params)文件第416行、执行返回Database.Cursor.execute(self、query,django.db.utils.IntegrityError: NULL约束失败: forum_question.user_id 14/Apr/2022 09:58:02 "POST /ask/ HTTP/1.1“500 175023
发布于 2022-04-14 08:36:43
论坛问题实例必须有一个非空用户字段,但您没有指定与您正在创建的对象相关的用户。在不想添加用户的情况下,请将模型的用户字段更新为:
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)或者在询问表单中重载form_valid(),以便像这样添加用户(注意,我还没有直接测试这一点,请遵循这里的文件):
class AskForm(CreateView):
def post(self):
user = self.request.user
model = Question
form_class = QuestionForm
template_name = 'forum/ask-question.html'
if form_class.is_valid():
form_class.save()
def form_valid(self, form):
form.instance.created_by = self.request.user
return super().form_valid(form)发布于 2022-08-08 18:10:26
我不确定这是否仍然有用,但是,我遇到了同样的错误。您可以通过删除迁移文件和数据库来修复错误。错误是由于向数据库中已经存在的字段发送空数据(没有数据),通常是在修改或删除该字段之后。
https://stackoverflow.com/questions/71868469
复制相似问题