这是从数据库打开对象以相同形式进行编辑,然后使用django保存同一对象的更新值的正确方法吗?

安基·辛格

这是我的代码:

要创建新的问题对象,请使用表单

def raise_issue_view(request, *args, **kwargs):
    
    form = RaiseIssueForm(request.POST or None)
    if form.is_valid():
        form.save()

        obj = RaiseIssueModel.objects.latest('id')
        return redirect("/raise_issue/" + str(obj.id))
    
    context = {
        "form" : form
    }

    return render(request,"raise_issue.html", context)

要编辑先前创建的问题,请通过链接127 ... 8000 / edit_issue / <issue_id>

def edit_issue_view(request, id):
    obj = RaiseIssueModel.objects.get(id=id)

    form = RaiseIssueForm(instance=obj)
    new_form = RaiseIssueForm(request.POST, instance=obj)
    

    if new_form.is_valid():
        
        new_form.save()
        
        return redirect("/raise_issue/" + str(obj.id))
    
    context = {
        "form" : form
    }

    return render(request,"raise_issue.html", context)

在这里,在“编辑问题”视图中,首先将数据库数据加载到“表单”中,然后创建一个新表单(new_form)以保存更新的数据。这样可以吗,或者有更好的方法吗?谢谢,

尼古拉斯·阿普里乌(Nicolas Appriou)

这有效,但不正确...经过验证的表单是new_form如果无效,则将显示来自表单的错误(由于尚未提交,因此没有任何错误)。

您也无法检查对象是否存在。

def edit_issue_view(request, id):
    try:
        obj = RaiseIssueModel.objects.get(id=id)
    except RaiseIssueModel.DoesNotExist:
        raise Http404()

    form = RaiseIssueForm(request.POST or None, instance=obj)
    
    if form.is_valid():
        form.save()
        
        return redirect("/raise_issue/" + str(obj.id))
    
    context = {
        "form" : form
    }

    return render(request,"raise_issue.html", context)

然后,为您的第一个表格。表单的save()方法应返回创建的对象(假设您使用了django.forms.ModelForm)。所以你可以这样写:

def raise_issue_view(request, *args, **kwargs):
    
    form = RaiseIssueForm(request.POST or None)
    if form.is_valid():
        obj = form.save()
        return redirect("/raise_issue/" + str(obj.id))
    
    context = {
        "form" : form
    }

    return render(request,"raise_issue.html", context)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档