У меня есть менеджер этой модели:
class ProductManager(models.Manager):
def search(self, text):
import logging
logging.info(222222222222, text)
vector = pg_search.SearchVector('brand__brand_name', weight='A') +\
pg_search.SearchVector('title', weight='A')+\
pg_search.SearchVector('description', weight='C')
query = pg_search.SearchQuery(text)
rank = pg_search.SearchRank(vector, query)
logging.info(111111, text)
return self.get_queryset().annotate(rank=rank).filter(search_vector=query).annotate(document=vector).order_by('-rank')
Используется в моей модели:
class Product(TimeStampedModel):
'''some fields'''
objects = ProductManager()
Далее в моем views.py У меня есть:
logging.info(search)
products_list = Product.objects.search(search).select_related('some fields')
logging.info(products_list)
И это работает на моем локальном сервере разработки, но не на производстве. Я вижу, что логи вошли в мое представление, но не видят логи, введенные методом search
моего менеджера. Почему это может случиться?
ОБНОВЛЕНИЕ 1:
import logging
logging.basicConfig(
level = logging.INFO,
format = '%(asctime)s %(levelname)s %(message)s',
filename = os.path.join(BASE_DIR, 'djjj.log'),
)
ОБНОВЛЕНИЕ 2:
Локализованная проблема - это в filter(search_vector=query)
части и search_vector
это:
import django.contrib.postgres.search as pg_search
search_vector = pg_search.SearchVectorField(null=True)
Это поле содержит текст в базе данных. Может ли это быть вызвано тем, что я загрузил полную базу данных на сервер, и она как-то не видит это поле?
После использования оболочки и инструмента отладки Pycharm - я вижу содержимое serach_vector
следующим образом:
'\\'active\\':7C \\'astera\\':1A,6C \\'cool\\':9C \\'minerals\\':8C \\'mint\\':10C \\'зубная\\':2A \\'минералами\\':5A \\'паста\\':3A \\'с\\':4A'
Что это за \\
? Может быть, эти символы предварительно смешаны, как к словам, и в этом проблема? Когда я проверяю это поле в pgAdmin - я вижу только буквы, никаких других знаков. Или это просто отладочное форматирование текста Pycharm?