Django字段在create中可编辑,但在edi中不可编辑

2024-09-30 04:37:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个可以添加/修改/删除/查看成员的小应用程序

def member_edit(request,member_id):

    MemberForm = modelform_factory(Member, fields=('employee_id', 'employee_name'))

    if request.method == 'POST':
        member = MemberForm(request.POST)
        if member.is_valid():
            member.save()
            return HttpResponseRedirect(reverse("members:member_view"))
    else:
        member = get_object_or_404(Member, pk=member_id)

    return render(request, 'members/member_edit.html', {'member': member})

我注意到所有的字段都变成了显示模式,而不是编辑

<form action="" method="post">
{% csrf_token %}
{{ form.non_field_errors }}
<table>
    <tr>
        <th> <label for="{{ member.employee_id.id_for_label }}">Employee id:</label> </th>
        <td> <input type="text" value = {{ member.employee_id }} /> </td>
        <td> {{ member.employee_id.errors }} </td>
    </tr>
    <tr>
        <th> <label for="{{ member.employee_name.id_for_label }}">Employee Name:</label> </th>
        <td> <input type="text" value = {{member.employee_name }} /></td>
        <td> {{ member.employee_name.errors }} </td>
    </tr>
</table>
<input type="submit" value="Update">

如果我将member\u edit函数更改为该函数,它可以工作,但我没有任何数据要更改(显然):

def member_edit(request,member_id):

    MemberForm = modelform_factory(Member, fields=('employee_id', 'employee_name'))

    if request.method == 'POST':
        member = MemberForm(request.POST)
        if member.is_valid():
            member.save()
            return HttpResponseRedirect(reverse("members:member_view"))
    else:
        member = MemberForm() # change made only here

    return render(request, 'members/member_edit.html', {'member': member})

我错过了什么


Tags: nameidreturnifrequestemployeepostedit
1条回答
网友
1楼 · 发布于 2024-09-30 04:37:02

我认为您需要将成员实例传递给表单

from django.shortcuts import get_object_or_404

def member_edit(request, member_id):
    MemberForm = modelform_factory(Member, fields=('employee_id', 'employee_name'))

    if request.method == 'POST':
        instance = get_object_or_404(Member, id=member_id)
        member = MemberForm(request.POST, instance=instance)
        if member.is_valid():
            member.save()
            return HttpResponseRedirect(reverse("members:member_view"))
    else:
        member = MemberForm() # change made only here

    return render(request, 'members/member_edit.html', {'member': member})

相关问题 更多 >

    热门问题