Python Django:不支持的查找';案例"精确"&"x27;不允许用于CharField或在字段上连接

Python Django:不支持的查找';案例"精确"&"x27;不允许用于CharField或在字段上连接,python,django,django-views,Python,Django,Django Views,这是我服务器上的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',) person

这是我服务器上的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')
以下是我遇到的错误。

    django.core.exceptions.FieldError: Unsupported lookup 'case_exact' for CharField or join on the field not permitted.

Below are TestPersona and TestPersonaName models.

    class TestPersonaName(models.Model):
        name = models.CharField(max_length=100,null=True)
        def __str__(self):
            return self.name

    class TestPersona(models.Model):
        name = models.ForeignKey('TestPersonaName',null=True)
        key  = models.CharField(max_length=200,null=True,blank=True)
        label = models.CharField(max_length=200,null=True,blank=True)
        value = models.CharField(max_length=200,null=True,blank=True)
        def __str__(self):
            return self.name + " " + self.key
请您解释一下我为什么会出现这个错误,以及如何消除这个错误?提前感谢。

更改此行

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


最后,在花了一整天的时间讨论这个问题之后,我终于能够知道我在哪里犯了错误

在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')

精确字段名和模型字段名之间应该有两个下划线

假设您正在匹配名为persona\u name的字段

elif TestPersonaName.objects.filter(persona_name__iexact=persona_name).exists():
    testpersona = TestPersona.objects.get(persona_name__iexact=persona_name)

iexact
匹配值,无论大小写是否敏感。

我现在收到以下错误“不支持查找CharField的'name'或不允许在字段上联接”对于这行代码,elif TestPersonaName.objects.filter(name\uuuu name\uuuuu case\u exact=persona\u name).exists():否,它将是
TestPersonaName.objects.filter(name\uuu case\u exact=perona\u name).exists()
不要更改此行好的,我已经按照您提到的那样做了,但是我遇到了同样的错误,不支持查找CharField或join的“case\u exact”字段不允许。我真的很感谢@Exprator您花时间来帮助我。更改此行
TestPersonaName.objects.filter(name\uu case\u exact=perona\u name)。exists()
TestPersona.objects.filter(name\uu case\u exact=perona\u name)。exists()
elif TestPersonaName.objects.filter(persona_name__iexact=persona_name).exists():
    testpersona = TestPersona.objects.get(persona_name__iexact=persona_name)