Django,使用ModelForm

时间:2018-05-30 12:50:57

标签: python django modelform

我正在玩django,ModelForms,我用外键创建了PostModel和CommentModel。这是所有帖子都有一个评论框,允许用户评论,这里是我的观点完美的工作,我只是想知道我可以将数据添加到评论字段的最佳方式

def comment(request, id):
try:
    post = PostModel.objects.get(pk=id)
    if request.method == 'POST':
         form = CommentForm(request.POST)
         if form.is_valid():
            comment = form['comment'].value()
            post.postcomment_set.create(comment=comment)
            return redirect('all_post')

    else:
        form = CommentForm()
        context['form2'] = form
    return render(request, 'prac/comment.html', context)
except Exception as e:
    return HttpResponse(f'Error {e}')

模板中的表单

<form action="{% url 'comment' post.id %}" method="post">
            {% csrf_token %}
            <p>{{form2.comment.label}}<br>{{form2.comment}} <input type="submit" value="Comment"></p>
 </form>

一切正常我只想知道我在视图中处理数据处理的最佳方式

2 个答案:

答案 0 :(得分:1)

尝试使用form.instance代替,它包含新的评论实例,因此您可以在保存前修改它:

 if form.is_valid():
        form.instance.post = post
        form.save()
        return redirect('all_post')

答案 1 :(得分:0)

form = CommentForm(request.POST)
if form.is_valid():
    variable = form.save(commit=False)
    variable.fieldname = value # you can add here extra field 
    variable.save()
    return redirect('all_post')

form = CommentForm(request.POST)
if form.is_valid():
    variable = modelname()
    variable = form['comment'].value()
    variable.fieldname = value # you can add here extra field 
    variable.save()
    return redirect('all_post')