我试图让我的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方法。
谢谢。
答案 0 :(得分:0)
我返回的是User对象,而不是SurveyInit对象(表单的模型)