我有这个模特经理:
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)
这在我的本地开发服务器上有效,但不适用于生产环境。我看到日志输入了我的视图,但是看不到在Manager的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)
此字段在数据库中具有文本。原因可能是-我已将完整的数据库上传到服务器,却以某种方式看不到该字段?
使用shell和Pycharm调试工具后-我看到serach_vector
的内容是这样的:
'\\'active\\':7C \\'astera\\':1A,6C \\'cool\\':9C \\'minerals\\':8C \\'mint\\':10C \\'зубная\\':2A \\'минералами\\':5A \\'паста\\':3A \\'с\\':4A'
\\
是什么?可能是那些字符预混了一些单词,这是问题所在吗?当我在pgAdmin中检查该字段时-我只看到字母,没有其他标志。还是仅仅是Pycharm调试文本格式?