UpdateView将正确显示模型数据,但实际上不会保存更新

时间:2018-08-06 23:24:22

标签: django python-3.x django-views

我试图让我的UpdateView将当前数据加载到表单中->允许用户进行更改->更新对象并将更改保存到数据库中。到目前为止,我有以下代码:

class SurveyInitUpdate(UpdateView):
    model = SurveyInit
    template_name = 'Model/surveyInit.html'
    form_class = SurveyInitForm
    success_url = reverse_lazy('Model:myModel-home')

    def get(self, request, **kwargs):
        self.object = SurveyInit.objects.get(user=self.request.user)
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        context = self.get_context_data(object=self.object, form=form)
        return self.render_to_response(context)

    def get_object(self, queryset=None):
        return self.request.user

到目前为止,它可以正确加载用户的数据并允许他们在表单中输入更改,但是在用户提交时,它不会更改对象或数据库信息!谢谢您的帮助!

每个请求都是我的模板:

{% block body %}
<div class="container-fluid">
    <div class="row">
        <div class="col-sm-12 col-md-7">
            <div class="panel panel-default">
                <div class="panel-body">
                    <h3>Header</h3>
                    {% if error_message %}
                        <p><strong>{{ error_message }}</strong></p>
                    {% endif %}
                    <form class="form-horizontal" action="" method="post" enctype="multipart/form-data">
                        {% csrf_token %}
                        {% include 'Model/form-template.html' %}
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-success">Submit</button>
                            </div>
                        </div>
                    </form>

                </div>
            </div>
        </div>
    </div>
</div>{% endblock %}

Model / form-template.html是一个简单的for循环,可循环访问“表单字段”。

我尝试添加此post方法,但它只会创建一个新实体,不会更新当前实体。

    def post(self, request):
    form = self.form_class(request.POST)
    if form.is_valid():
        sub = form.save(commit=False)
        sub.user = request.user
        sub.save()
    return redirect('Model:myModel-home')

更新:我不认为需要重写post方法。

谢谢。

1 个答案:

答案 0 :(得分:0)

我返回的是User对象,而不是SurveyInit对象(表单的模型)