【问题标题】:'QueryDict' object is not callable'QueryDict' 对象不可调用
【发布时间】:2021-03-10 23:28:23
【问题描述】:

当我想运行代码时,在我的博客中创建用户,我得到

错误 500

'QueryDict' 对象不可调用

以及这一行的问题:

数据 = form.data()

我的代码如下:

def create_post(request):
    if request.method == 'POST':
        form = PostFormClass(request.POST)
        if form.is_valid():
            form.save()
            data = form.data()
            dump = json.dumps(data)
            return JsonResponse(dump, content_type="application/json")
        return JsonResponse({"message": "invalid form"})
    else:
        form = PostFormClass()
        args = {'form': form}
        return JsonResponse(args, content_type="application/json")

【问题讨论】:

  • form.data() 没有意义,因为.data 是一个属性,它将返回request.POST。不过,您可能想使用form.cleaned_data

标签: python django api django-views


【解决方案1】:

form.data 是一个属性,它将为您提供构建表单所依据的数据,因此在本例中为request.POST。由于form.data 是一个属性,调用它wall 调用QueryDict 对象,这没有多大意义。

不过,您可能不是在寻找form.data,而是form.cleaned_data,这是Form 的“产品”。因此,您可以使用:

def create_post(request):
    if request.method == 'POST':
        form = PostFormClass(request.POST)
        if form.is_valid():
            form.save()
            data = form.data()
            dump = json.dumps(data)
            return JsonResponse(form.cleaned_data)
        return JsonResponse({'message': 'invalid form'})
    else:
        form = PostFormClass()
        args = {'form': form}
        return JsonResponse(args, content_type="application/json")

但请注意,并非所有内容都可以进行 JSON 序列化,例如模型对象、QuerySet 等,因此根据您在表单中使用的字段,JSON 序列化将产生错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-10
    • 2015-10-13
    • 2021-08-21
    • 2020-02-15
    • 1970-01-01
    • 2018-09-30
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多