首页 > 解决方案 > 答案创建视图没有在 django 的数据库中存储数据

问题描述

我正在研究 Quora 和 StackOverflow 克隆的混合体。我已经制作了一个“add_answer”视图,让我可以添加问题的答案,但由于某些原因,它显示了完整性错误: 这是错误图像
但是当我通过管理面板添加时,它会在数据库中添加答案。怎么了?代码如下:

  1. 模型.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')  
  1. 表格.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
  1. “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})  

  1. 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 %}

如果有人帮助我,我将不胜感激。

标签: pythondjangodjango-formsdjango-views

解决方案


您忘记将问题实例分配给回答模型

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

推荐阅读