django - 是否可以将您自己的字符串添加到 Django SearchVectorField 中?

标签 django postgresql full-text-search

我知道如何使用原始 PostgreSQL 命令执行此操作,但想知道是否可以使用 Django PostgreSQL 搜索来执行此操作。

class Person(models.Model):
    name = models.CharField(max_length=64)
    description = models.CharField(max_length=256)
    active = models.BooleanField(default=False)
    search_vector = SearchVectorField(blank=True)

def update_search(person):
    vector = SearchVector('name') + SearchVector('description')
    if person.active:
        vector = vector + SearchVector('alive')
    person.search_vector = vector

django.core.exceptions.FieldError: Cannot resolve keyword 'alive' into field.

我尝试将“alive”设为@property 方法,但看起来它只需要一个用于搜索的数据库字段。

有没有办法在纯 Django ORM 中执行此操作,还是我应该使用原始 SQL 路由?

最佳答案

您可以使用 Value() expressions在你的 SearchVector 中添加一个字符串如下例所示:

from django.db.models import Value

    ...
    vector = vector + SearchVector(Value('alive'))
    ...

关于django - 是否可以将您自己的字符串添加到 Django SearchVectorField 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42679743/

相关文章:

ajax - 在 Django 中更新表单值而不重新加载页面?

postgresql - 对在 postgresql 中使用 array_agg 创建的文本聚合进行排序

mysql部分词搜索

ruby-on-rails-3 - 初始化tsearch,Trigram后pg_search multisearch出错

django - 在 Django 中使用动态选择字段

python - Heroku Python Django 应用程序部署失败 : No module named 'oauth2_provider'

python - Django 装置 : Cannot assign data to textfield using json file

postgresql - 我应该使用 Firebase UID 作为数据库中用户表的主键吗?

SQL 选择具有较高时间戳值的行

python - Django 2 + PostgreSQL FullText 搜索不匹配它应该的