python - 答案创建视图没有在 django 的数据库中存储数据
问题描述
我正在研究 Quora 和 StackOverflow 克隆的混合体。我已经制作了一个“add_answer”视图,让我可以添加问题的答案,但由于某些原因,它显示了完整性错误:
这是错误图像
但是当我通过管理面板添加时,它会在数据库中添加答案。怎么了?代码如下:
- 模型.py:
class Answer(models.Model):
content = models.TextField()
user = models.ForeignKey(User,on_delete=models.CASCADE)
question = models.ForeignKey(Question,on_delete=models.CASCADE,blank=False)
created = models.DateTimeField(auto_now_add=True)
upvotes = models.PositiveIntegerField(default=0)
is_active = models.BooleanField(default=True)
def __str__(self):
return '{}\'s Answer'.format(self.user.username)
class Meta:
ordering = ('-upvotes','-created')
- 表格.py:
class AnswerForm(forms.ModelForm):
content = forms.CharField(widget=forms.Textarea,help_text='Your Answer in Detail. Note: MarkDown is enabled.')
class Meta:
model = Answer
fields = ['content']
def __init__(self,author,question,*args,**kwargs):
super().__init__(*args,**kwargs)
self.user = author
self.question = question
- “add_answer”视图(views.py):
@login_required
def add_answer(request, pk):
ques = get_object_or_404(Question, pk = pk)
if request.method == 'POST':
form = AnswerForm(request.user,ques,request.POST)
if form.is_valid():
cd = form.cleaned_data
answer = form.save(commit=False)
answer.content = cd['content']
answer.save()
messages.success(request,'Success! Your Answer has been added!')
return redirect('forum')
else:
messages.error(request,form.errors)
else:
form = AnswerForm(request.user,ques)
return render(request,'discussion/answer_create.html',{'form':form})
- answer_create.html(模板):
{% extends 'base.html' %}
{% load markdownify %}
{% block title %} Add Answer {% endblock %}
{% block header %}
<h2 class="display-5" style="font-family: x-locale-heading-primary,zillaslab,Palatino,Palatino Linotype,x-locale-heading-secondary,serif;">
Add Answer:
</h2>
{% endblock %}
{% block content %}
{% if form.errors %}
<h4 class="alert alert-primary alert-warning" role="alert">Errors:<br> {{form.errors}} <hr></h4>
{% endif %}
<form action="" method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit">
</form>
{% endblock %}
如果有人帮助我,我将不胜感激。
解决方案
您忘记将问题实例分配给回答模型
answer.question = 问题
ques = get_object_or_404(Question, pk = pk)
if form.is_valid():
cd = form.cleaned_data
answer = form.save(commit=False)
answer.question = ques
answer.content = cd['content']
answer.save()
您还可以在模型表单 init 中执行以下操作
def __init__(self,author,question,*args,**kwargs):
super().__init__(*args,**kwargs)
self.form.instance.user = author
self.form.instance.question = question
推荐阅读
- html - 不透明度属性在 css 中没有给出预期的结果
- angular - Highcharts Sunburst 在水平变化时改变颜色
- c# - MigraDoc:如何在奇数页的部分之后添加空白页?
- python - 将 csv 导入 OrderedDict 并使用回归进行预测
- c++ - 用 C++ 画一棵 ASCII 艺术圣诞树
- python - 在 python 中读取 CSV 文件时如何跳过逗号?
- amazon-s3 - S3 Boto3 python - 将所有文件 acl 更改为公共读取
- geoserver - 我们曾经通过 viewparams 字段将参数发送到我们的 WMS 地理服务器 SQLViews。但是WMTS没有这个字段
- python - python- sqlite3.OperationalError:靠近“<”:语法错误
- sql - If else 在 Where 子句 SQL 中