Django:不支持的 CharField 查找“case_exact”或不允许加入该字段

这是我的服务器上的 GET 请求。


 HTTP GET /testPage/?persona_name=Aman&key_name=country&key_label=My+Country&key_value=India&Save=Submit 500

在这个视图的帮助下,我从 GET 请求中获取值。


def PersonaSave(request):

    persona_name = request.GET.get('persona_name',)

    persona_key = request.GET.get('key_name',)

    persona_key_value = request.GET.get('key_value',)

    persona_key_label = request.GET.get('key_label',)

    persona_submit = request.GET.get('Save',)

    return( persona_name , persona_key , persona_key_label , persona_key_value , persona_submit

现在以下是我检查具有给定角色名称的对象是否存在的功能。如果它存在,那么我正在更新值,如果它是一个新的角色,那么我正在创建新的 testPersona 对象。


def TestPageView(request):

    x=PersonaSave(request)

    persona_name = x[0]

    persona_key = x[1]

    persona_key_label=x[2]

    persona_key_value=x[3]

    persona_submit=x[4]

    testPersonaName = TestPersonaName(name=persona_name)

    testPersonaName.save()


    if(persona_name is None and persona_key is None and persona_key_label is None and persona_key_value is None):

        return render(request, 'dashboard/test_page.html')


 # Below is the function for updating testPersona . 


    elif TestPersonaName.objects.filter(name__case_exact=persona_name).exists():

        testpersona = TestPersona.objects.get(name__case_exact=persona_name)

        if testpersona.key == persona_key:

            testpersona.label= persona_key_label

            testpersona.value = persona_key_value

            testpersona.save()





#If persona with new name is detected then saving a new testPersona object.

      testpersona=TestPersona(name=persona_name,key=persona_key,label=persona_key_label,value=persona_key_value)

        testpersona.save()


        return render(request,'dashboard/test_page.html')


请您解释一下为什么我会收到此错误以及如何消除此错误?提前致谢。


慕斯王
浏览 176回答 3
3回答

ibeautiful

改变这一行 testpersona = TestPersona.objects.get(name__case_exact=persona_name)到 testpersona = TestPersona.objects.get(name__name__case_exact=persona_name)

墨色风雨

确切和模型字段名称之间应该有2 个下划线。假设您正在匹配名为persona_name 的字段elif TestPersonaName.objects.filter(persona_name__iexact=persona_name).exists():    testpersona = TestPersona.objects.get(persona_name__iexact=persona_name)iexact 无论大小写敏感,都匹配值。

猛跑小猪

最后,在这个问题上花了一整天之后,我能够知道我在哪里做错了。在TestPersona 模型中,有一个字段“name”,它是模型TestPersonaName 的外键。这意味着TestPersonaName 的对象将被分配给TestPersona 的“name”字段。所以答案是:def TestPageView(request):    x=PersonaSave(request)    persona_name = x[0]    persona_key = x[1]    persona_key_label=x[2]    persona_key_value=x[3]    persona_submit=x[4]    if(persona_name is None and persona_key is None and persona_key_label is None and persona_key_value is None):    # Since no paramteres are persent in GET request(i.e Nothing is filled in form), then we will simply render the blank form.        return render(request, 'dashboard/test_page.html') #  Below is the function for updating testPersona .     elif TestPersonaName.objects.filter(name__iexact=persona_name).exists():        testPersonaName_obj = TestPersonaName.objects.filter(name__iexact=persona_name) #Fetching an object from TestPersonaName model where name = persona_name        testpersonaSet = TestPersona.objects.filter(name=testPersonaName_obj) #Passing testPersonaName_obj to 'name' field of TestPersona model because name is foreign key.        for testpersona in testPersonaSet: #testPersonaSet is a QuerySet            if testpersona.key == persona_key: #Checking whether persona with given key is already present or not         # If TestPersona object with given name and give key is already present then we will update the details instead of making a new object.                testpersona.label= persona_key_label                 testpersona.value = persona_key_value                testpersona.save()                return render(request,'dashboard/test_page.html')    #If persona with new name is detected then saving new objects of TestPersonaName and TestPersona object.    testPersonaName = TestPersonaName(name=persona_name)    testPersonaName.save()     testpersona(name=testPersonaName,key=persona_key,label=persona_key_label                ,value=persona_key_value)    testpersona.save()    return render(request,'dashboard/test_page.html')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python