【问题标题】:'QueryDict' object has no attribute 'first_name''QueryDict' 对象没有属性 'first_name'
【发布时间】:2020-02-15 03:11:14
【问题描述】:

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正确(已调试)。

【问题讨论】:

  • 你的问题可能在这里first_name = request.POST.first_name。在您的first_name 被填充的地方提供您的模板
  • Django 错误页面包含请求信息,这里没有问题i.imgur.com/Y64hjaY.png

标签: django python-3.7


【解决方案1】:

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

request.POST['first_name']

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

request.POST.get('first_name')

【讨论】:

    【解决方案2】:

    您错误地使用了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 值而不是异常。还要确保模板中的键值相同。

    【讨论】:

      猜你喜欢
      • 2015-10-13
      • 1970-01-01
      • 2018-03-16
      • 2020-07-05
      • 2021-02-22
      • 2016-10-21
      • 1970-01-01
      • 2011-06-23
      • 2020-05-10
      相关资源
      最近更新 更多