Ответ создать представление не хранит данные в базе данных в Django - PullRequest
0 голосов
/ 23 февраля 2019

Я работаю над гибридом Quora и клоном StackOverflow.Я сделал представление "add_answer", которое позволяет мне добавлять ответы на вопросы, но по некоторым причинам оно показывает ошибку целостности: Вот изображение ошибки
Но когда я добавляю через админ-панель, он добавляетответ в базе данных.Что случилось?Код выглядит следующим образом:

  1. models.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')  
forms.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 (template):

{% 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 %}

Было бы очень признательно, если бы кто-нибудь помог мне.

1 Ответ

0 голосов
/ 23 февраля 2019

Вы забыли назначить экземпляр вопроса для модели ответа

answer.question = Ques

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
...