/answer/ NOT NULL 约束的 IntegrityError 失败:answer_answer.post_id
IntegrityError at /answer/ NOT NULL constraint failed: answer_answer.post_id
当我提交 answer 时,我有 2 个模型,一个用于 Question,一个用于 Answer形成它向我抛出这样的错误:IntegrityError at /answer/
NOT NULL 约束失败:answer_answer.post_id 我正在尝试通过添加 blank=False 和 null=False[=34= 来修复它] 并删除了我的迁移,但错误仍然存在。请问如何解决这个问题。
我希望用户能够 post 回答单个问题错误来自我的 My_Answer 视图,它突出显示了这一行代码:
return super (My_Answer,self).form_valid(form)
我的模特
class Question(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100, blank=False, null=False)
body = RichTextField(blank=False, null=False)
category = models.CharField(max_length=50, blank=False, null=False)
def __str__(self):
return str(self.user)
class Answer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
answer = RichTextField(blank=False, null=False)
post = models.ForeignKey(Question, on_delete=models.CASCADE)
def __str__(self):
return str(self.user)
观看次数
def viewQuestion(request, pk):
question = Question.objects.get(id=pk)
answers = Answer.objects.filter(post_id=question)
context = {'question':question, 'answers':answers}
return render(request, 'viewQuestion.html', context)
class My_Question(LoginRequiredMixin, CreateView):
model = Question
fields = ['title', 'body', 'category']
template_name = 'question.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
form.instance.user = self.request.user
return super (My_Question, self).form_valid(form)
class My_Answer(LoginRequiredMixin, CreateView):
model = Answer
fields = ['answer']
template_name = 'answer.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
form.instance.user = self.request.user
return super (My_Answer, self).form_valid(form)
viewQuestion 模板:
<div class="container">
<div class="row justify-content-center">
<h1>{{question.title}}</h1>
<hr>
</div>
<br>
<h3 style="font-family: arial;">{{question.body|safe}}</h3>
<hr>
<br>
<h5>{{question.user.username.upper}}</h5>
</div>
<!--question-->
<div class="container">
<div class="row justify-content-center">
<a href="{% url 'answer' %}" class="btn btn-primary">Post Your Answer</a>
</div>
</div>
<br>
<br>
<!--answer-->
<div class="container">
{% for answer in answers reversed %}
<div class="row justify-content-center">
<p>{{answer.user}}</p>
<p>{{answer.answer|safe}}</p>
</div>
{% endfor %}
</div>
感谢您的帮助。
您正在保存一个答案实例,其中只有来自表单的答案和来自请求用户的用户,但是 post ID 在哪里,它不能是 none 并且是必需的。
你 url 模式应该是这样的
urlpatterns = [
path('question/<int:pk>/', viewQuestion, name='view-question'),
path('question/<int:pk>/answer/', My_Answer.as_view(), name='answer'),
]
您只需将 viewQuestion.html 中的 url 更改为
<div class="row justify-content-center">
<a href="{% url 'answer' pk=question.pk %}" class="btn btn-primary">Post Your Answer</a>
</div>
并且在回答中的观点是
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.post_id = self.kwargs['pk']
return super (My_Answer, self).form_valid(form)
所以基本上你是在没有 post pk 的情况下保存答案实例,我在 url 参数中传递了 post pk 并得到答案 post 视图以保存在表单实例中.现在应该可以使用了!
当我提交 answer 时,我有 2 个模型,一个用于 Question,一个用于 Answer形成它向我抛出这样的错误:IntegrityError at /answer/ NOT NULL 约束失败:answer_answer.post_id 我正在尝试通过添加 blank=False 和 null=False[=34= 来修复它] 并删除了我的迁移,但错误仍然存在。请问如何解决这个问题。
我希望用户能够 post 回答单个问题错误来自我的 My_Answer 视图,它突出显示了这一行代码:
return super (My_Answer,self).form_valid(form)
我的模特
class Question(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100, blank=False, null=False)
body = RichTextField(blank=False, null=False)
category = models.CharField(max_length=50, blank=False, null=False)
def __str__(self):
return str(self.user)
class Answer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
answer = RichTextField(blank=False, null=False)
post = models.ForeignKey(Question, on_delete=models.CASCADE)
def __str__(self):
return str(self.user)
观看次数
def viewQuestion(request, pk):
question = Question.objects.get(id=pk)
answers = Answer.objects.filter(post_id=question)
context = {'question':question, 'answers':answers}
return render(request, 'viewQuestion.html', context)
class My_Question(LoginRequiredMixin, CreateView):
model = Question
fields = ['title', 'body', 'category']
template_name = 'question.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
form.instance.user = self.request.user
return super (My_Question, self).form_valid(form)
class My_Answer(LoginRequiredMixin, CreateView):
model = Answer
fields = ['answer']
template_name = 'answer.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
form.instance.user = self.request.user
return super (My_Answer, self).form_valid(form)
viewQuestion 模板:
<div class="container">
<div class="row justify-content-center">
<h1>{{question.title}}</h1>
<hr>
</div>
<br>
<h3 style="font-family: arial;">{{question.body|safe}}</h3>
<hr>
<br>
<h5>{{question.user.username.upper}}</h5>
</div>
<!--question-->
<div class="container">
<div class="row justify-content-center">
<a href="{% url 'answer' %}" class="btn btn-primary">Post Your Answer</a>
</div>
</div>
<br>
<br>
<!--answer-->
<div class="container">
{% for answer in answers reversed %}
<div class="row justify-content-center">
<p>{{answer.user}}</p>
<p>{{answer.answer|safe}}</p>
</div>
{% endfor %}
</div>
感谢您的帮助。
您正在保存一个答案实例,其中只有来自表单的答案和来自请求用户的用户,但是 post ID 在哪里,它不能是 none 并且是必需的。
你 url 模式应该是这样的
urlpatterns = [
path('question/<int:pk>/', viewQuestion, name='view-question'),
path('question/<int:pk>/answer/', My_Answer.as_view(), name='answer'),
]
您只需将 viewQuestion.html 中的 url 更改为
<div class="row justify-content-center">
<a href="{% url 'answer' pk=question.pk %}" class="btn btn-primary">Post Your Answer</a>
</div>
并且在回答中的观点是
def form_valid(self, form):
form.instance.user = self.request.user
form.instance.post_id = self.kwargs['pk']
return super (My_Answer, self).form_valid(form)
所以基本上你是在没有 post pk 的情况下保存答案实例,我在 url 参数中传递了 post pk 并得到答案 post 视图以保存在表单实例中.现在应该可以使用了!