使用 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 更新模型实例的主要内容,如果未能解决你的问题,请参考以下文章