使用 Django 更新模型实例

Posted

技术标签:

【中文标题】使用 Django 更新模型实例【英文标题】:Updating Model Instance with Django 【发布时间】:2018-03-25 21:25:00 【问题描述】:

我正在使用 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')

已经感谢您的支持!

【问题讨论】:

你使用的是哪个版本的 Django? 从您的重定向代码来看,它看起来像 2.0。 你能发布你的 urls.py 文件吗? 【参考方案1】:

将 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 进行重定向。

【讨论】:

以上是关于使用 Django 更新模型实例的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 更新模型实例

如何更新 django 模型实例的多个字段?

如何更新 django 模型实例的多个字段?

通过 Django REST POST 更新模型实例

如何使用 Django Rest Framework 创建多个模型实例?

django - 使用 FormView 和 ModelForm 更新模型