Django字段可以在create中编辑,但不能在edit中编辑

时间:2018-11-14 15:16:50

标签: python django

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

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_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})

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

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

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})