Локальная база данных работает, но на Heroku я получаю: operator does not exist: text % unknown

Я занимаюсь этим вопросом уже несколько дней.

У меня есть база данных Postgres (версия 13), установленная локально и на Heroku. Django и версия Python идентичны. Когда я делаю api вызов к моей локальной базе данных, все в порядке - но когда я делаю вызов к базе данных Heroku, я получаю ошибку ниже.

Вход поиска (например, 'party') - строка, модель "trademark_trademark" - тип

models.TextField(null=True)

Я понимаю, что ошибка говорит о том, что мне нужно убедиться, что вводимый запрос имеет правильный тип. Может ли строка не запрашивать TextField. Если да, то какого типа оно должно быть. Я дилетант и не могу разобраться в этом - есть идеи, в чем может быть проблема?

ProgrammingError at /trademarks/api/trademarks/
operator does not exist: text % unknown
LINE 1: ...rademark" WHERE "trademark_trademark"."trademark" % 'party' ...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
Request Method: GET
Request URL:    https://CENSORED.herokuapp.com/trademarks/api/trademarks/?q=party&class_nos=0&no_related=true
Django Version: 4.0.5
Exception Type: ProgrammingError
Exception Value:    
operator does not exist: text % unknown
LINE 1: ...rademark" WHERE "trademark_trademark"."trademark" % 'party' ...
                                                             ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
Exception Location: /app/.heroku/python/lib/python3.9/site-packages/django/db/backends/utils.py, line 89, in _execute
Python Executable:  /app/.heroku/python/bin/python
Python Version: 3.9.15
Python Path:    
['/app/.heroku/python/bin',
 '/app',
 '/app/.heroku/python/lib/python39.zip',
 '/app/.heroku/python/lib/python3.9',
 '/app/.heroku/python/lib/python3.9/lib-dynload',
 '/app/.heroku/python/lib/python3.9/site-packages']
Server time:    Wed, 02 Nov 2022 23:00:27 +0000

Я пробовал разные версии postgresql, django и python.

Соответствующий код выглядит следующим образом (ошибка, похоже, связана с queryset = self.filter_queryset(self.get_queryset()) )

class TrademarkList(generics.ListAPIView):

serializer_class = TrademarkSerializer

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())
    serializer = self.get_serializer(queryset, many=True)
    response_list = serializer.data 
    newdict = {'count': self.total_no}
    response_list = {'results': response_list, 'extra': newdict}
    return Response(response_list)

def get_queryset(self):
    start = time.time()
    print('MEEP')

    try:
        q = self.request.query_params.get('q')
    except:
        q = None
    ...

    ...

    class_nos = self.request.query_params.get('class_nos')
    no_related = self.request.query_params.get('no_related')

    api_class_list = class_nos.split(",")
    conflicting = not self.request.query_params.get('no_related')
    # print(conflicting)
    if q is not None:
        # return search(q)
        search_classes = []

        if class_nos!='0' and class_nos!=None:
            for k in api_class_list:
                    # print k
                search_classes.append(k)
                if conflicting!='false':
                    search_classes.extend(get_conflicting_classes(k))
                else:
                    break

        q_set = q.split(' ')

        q_set_tri = []
        for i in q_set:
            n=0
            for j in range(0, len(i)):
                try:
                    triad = i[n:n+2]
                    print(triad)
                    if len(triad)==2:
                        q_set_tri.append(triad)
                    n+=1
                except:
                    break

        q_replaced = q.replace('-','').replace('.','').replace("'",'').replace("'",'')

        queryset_tri = Trademark.objects.filter(trademark__trigram_similar = q_replaced)
    
        queryset = queryset_tri.filter(status__in = ('Registered','Pending','Accepted','Advertised','Accepted with conditions','Provisionally refused'))
        
        results = queryset
        

        sorted_results = tmsearch.custom_input_sort_2022(results,q_replaced)

        self.total_no = len(sorted_results)
        
        return sorted_results

    ....
Вернуться на верх