使用Django更新模型实例

时间:2018-03-25 21:25:01

标签: python django class view

我正在使用CreateView1启动一个Estate实例。它工作正常,即使它是模板视图!现在我想重定向到UpdateView2并更新这些字段(我有充分的理由)。如何将实例1的pk传递给第二个视图,以及如何编辑这些字段?任何帮助将不胜感激!!

views.py

class CreateView1 (TemplateView):
    template_name = 'estate_form1.html'

    def get(self,request):
        form = RegisterForm()
        args = {'form': form,}
        return render(request, self.template_name, args)

    def post(self,request):
        form = RegisterForm(request.POST)
        if form.is_valid():
            estate = form.save(commit=False)
            estate.save()
            form = RegisterForm()
            return redirect('register:update2')
        args = {'form': form,}
        return render(request, self.template_name, args)

class UpdateView2(UpdateView):
    template_name = 'estate_form2.html'
    model = Estate
    fields = ["price", "area"]

estate_form1.html和estate_form2.html

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Submit</button>
</form>

forms.py

class RegisterForm(forms.ModelForm):
    price = forms.IntegerField(label="Price:")
    area = forms.IntegerField(label="Area:")

    Class Meta:
       model = Estate
       fields = ('price', 'area')

非常感谢您的支持!

1 个答案:

答案 0 :(得分:0)

将ID作为参数添加到CreateView1中的重定向函数中。

    def post(self, request):
        form = RegisterForm(request.POST)
        if form.is_valid():
            estate = form.save(commit=False)
            estate.save()
            form = RegisterForm()
            return redirect('register:update2', pk=estate.id)

然后确保您的url.py文件已设置为接收ID。它看起来像是:

    path('register/<int:pk>/', UpdateView2.as_view(), name='update2'),

我不确切地知道你要做什么,但作为补充说明,我考虑使用CreateView而不是TemplateView。这将允许您使用success_url重定向。