我如何预先填充此更新表格 [英] how can i prepopulate this update form

查看:45
本文介绍了我如何预先填充此更新表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望在编辑表单时将表单中的数据预先填充

i want the form to be prepopulated with data when i am editing the form

views.py

views.py

def edit_task(request, post_id):
    post = Post.objects.get(id=post_id)
    form = TaskForm(request.POST, instance=post)
    if request.method == 'POST':
        print(request.POST)
        form = TaskForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            return redirect('task')
    context = {'form': form}
    return render(request, 'List/add_task.html', context)

add_task.html

add_task.html

{% extends "List/Home.html" %}
{% block content %}

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

{% endblock content %}

推荐答案

请仔细考虑如何实例化表单.目前,您正在对GET和POST请求使用相同的代码 TaskForm(request.POST,instance = post):

Think carefully about how you instantiate forms. At the moment, you are using the same code TaskForm(request.POST, instance=post) for GET and POST requests:

def edit_task(request, post_id):
    post = Post.objects.get(id=post_id)
    form = TaskForm(request.POST, instance=post)
    if request.method == 'POST':
        print(request.POST)
        form = TaskForm(request.POST, instance=post)
        ...

但是 request.POST 对于GET请求为空,因此当您使用GET请求加载表单时,会得到一个带有错误的空表单.

But request.POST is empty for GET requests, so you'll get an empty form with errors when you load the form with a GET request.

您可以通过删除GET请求的 request.POST 来解决此问题

You can fix it by removing request.POST for GET requests

def edit_task(request, post_id):
    post = Post.objects.get(id=post_id)
    # Instantiate form without any data
    form = TaskForm(instance=post)
    if request.method == 'POST':
        print(request.POST)
        # replace the form for POST requests
        form = TaskForm(request.POST, instance=post)
        ...

使用 if ... else 而不是替换形式可能更清楚:

It might be clearer to use if...else instead of replacing the form:

def edit_task(request, post_id):
    post = Post.objects.get(id=post_id)
    if request.method == 'POST':
        print(request.POST)
        # instantiate form for POST requests
        form = TaskForm(request.POST, instance=post)
        ...
    else:
        # instantiate the form for GET requests
        form = TaskForm(instance=post)
    context = {'form': form}
    return render(request, 'List/add_task.html', context)


这篇关于我如何预先填充此更新表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆