如何在Django中使用模型表单编辑对象?

莫利

这可能是答案的重复目前,我正在使用用于创建对象的相同模型形式来更新对象。

views.py看起来像:(从答案中得出):

def newpost(request):
    form = PostForm(request.POST)
    if request.method == "POST":
        if form.is_valid():
            obj = form.save(commit=False)
            obj.save()
            return redirect('newpost')
    return render(request, 'console/newpost.html', {'form':form})

def editpost(request, pk):
    obj = Post.objects.get(id=pk)
    form = PostForm(instance=obj)
    if request.method == "POST":
        if form.is_valid():
            obj = form.save(commit=False)
            obj.save()
            return redirect('editpost')
    return render(request, 'console/editpost.html', {'form':form})

我的html形式editpost如下:

<form method="POST" action="{% url 'newpost' %}">
    {% csrf_token %}
    {{form.as_p}}
    <button type="submit"> Submit</button>
</form>

和我的urls.py样子:

path('console/post/', c_views.newpost, name='newpost'),
path('console/post/<int:pk>/', c_views.editpost, name='editpost'),

上面的代码工作得很好,但是使用来自pk的对象数据创建了一个新实例。

我添加了obj.delete()这样代码:

def editpost(request, pk):
    obj = Post.objects.get(id=pk)
    form = PostForm(instance=obj)
    obj.delete()
    if request.method == "POST":
        if form.is_valid():
            obj = form.save(commit=False)
            obj.save()
            return redirect('editpost')
    return render(request, 'console/editpost.html', {'form':form})

这段代码给了我我想要的确切信息,但是我知道这不是一个好习惯。我的问题是,这是正确的方法还是我落后于某处。我知道editposthtml中的操作不应该这样做{% url 'newpost' %},但是如果使用,{% url 'editpost' %}我不知道如何在url标签内传递pk值。谁能建议我正确的方法?

伊恩·谢尔文顿

您的每个视图都应接受GET和POST方法,当该方法为GET时,将实例化表单,而不request.POST会将任何数据传递给它,并且仅呈现表单。

def newpost(request):
    if request.method == 'GET':
        form = PostForm()
    else:  # POST
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('newpost')
    return render(request, 'console/newpost.html', {'form':form})

def editpost(request, pk):
    obj = Post.objects.get(id=pk)
    if request.method == 'GET':
        form = PostForm(instance=obj)
    else:  # POST
        form = PostForm(request.POST, instance=obj)
        if form.is_valid():
            form.save()
            return redirect('editpost')
    return render(request, 'console/editpost.html', {'form':form})

<form method="POST">

如果您未在表单上设置“ action”属性,它将把数据提交到浏览器当前所在的URL。这样,您可以对两个视图使用相同的模板

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用HTML表单而不是Django模型表单编辑对象

如何在 Django 中使用嵌套对象创建模型

如何在 Django 中使用表单更新/编辑数据库内容

如何在jsf中使用xhtml表单映射模型对象属性?

如何在Django模型数据库中使用已发布的用户保存表单

如何在Django表单中使用CSS?

如何在ListView Django中使用表单?

如何在 Django 表单中使用多选

如何在 JavaScript 中使用 Django 的模型

如何在 Django 模型中使用查询?

在使用子对象更新和检索模型实例时,如何在Django中使用memcache?

如何在Bootstrap中使用Laravel表单模型绑定?

我如何在Django中使用Models对象预填充表单字段

如何在django模型中使用外键获取对象的所有属性

如何在Django模型中使用芹菜节拍为每个对象创建单独的任务

如何在 Django 中使用 Q 对象

在Django模型表单集中使用Jquery

如何在FormData对象中使用基于数组的表单?

如何在Django中使用表单错误进行重定向?

如何在Django中使用Ajax提交表单

如何在Django中使用href提交表单?

Django:如何在表单/管理员中使用MultipleChoiceField

如何在Django中使用FileField测试表单?

如何在Django中使用表单过帐多个变量

如何在for循环中使用Django模型?

如何在信号中使用Django模型继承?

如何在信号中使用Django模型继承?

如何在DJango中使用不同模型的外键

如何在 Django 中使用字典更新模型的表