'QueryDict' 对象没有属性 'first_name'

'QueryDict' object has no attribute 'first_name'

AttributeError 'QueryDict' object has no attribute 'first_name'here 获取示例。我不明白这是什么问题

models.py

class Employee(models.Model):
    first_name = models.CharField(max_length=30)
    second_name = models.CharField(max_length=30)
    patronymic = models.CharField(max_length=30)
    birth_date = models.DateField()

views.py

def edit_employee_action(request, employee_id):
    if request.method == "POST":
        form = AddEmployeeForm(request.POST)
        if form.is_valid():
            edited = Employee.objects.filter(pk=employee_id)
            edited.update(
                first_name = request.POST.first_name,
                second_name = request.POST.second_name,
                patronymic = request.POST.patronymic,
                birth_date = request.POST.birth_date
            )
    else:
        form = AddEmployeeForm()
    form = AddEmployeeForm()
    return render(
        request,
        'edit_employee.html',
        context={'form': form}
    )

参数employee_id正确(已调试)

您需要像这样从 request.POST 中获取值:

request.POST['first_name']

(如果 first_name 在 request.POST 中不可用,此方法将引发 KeyError)

request.POST.get('first_name')

您使用的 request.POST 不正确。它实际上是一本字典。请尝试以下操作。

def edit_employee_action(request, employee_id):
    if request.method == "POST":
        form = AddEmployeeForm(request.POST)
        if form.is_valid():
            edited = Employee.objects.filter(pk=employee_id)
            edited.update(
                first_name = request.POST.get('first_name'),
                second_name = request.POST.get('second_name'),
                patronymic = request.POST.get('patronymic'),
                birth_date = request.POST.get('birth_date')
            )
    else:
        form = AddEmployeeForm()
    form = AddEmployeeForm()
    return render(
        request,
        'edit_employee.html',
        context={'form': form}
    )

这样即使密钥不存在,您也会得到一个 None 值而不是异常。还要确保模板中的键值相同。