2017-03-08 59 views
2

我知道如何用原始的PostgreSQL命令来做到这一点,但想知道是否有办法用Django PostgreSQL进行搜索。是否可以将您自己的字符串添加到Django SearchVectorField中?

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.

我试图使“活”一个@property的方法,但它看起来像它只是想搜索一个数据库字段。

是否有一种方法可以在纯Django ORM中执行此操作,还是应该转到原始SQL路由?

回答

2

您可以使用Value() expressions为字符串在SearchVector添加到在下面的例子:

from django.db.models import Value 

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

Ooooh。很好的发现。会试试这个。 – Dax

0

SearchVector不应该这样使用。它应该只接受字段名称。

请看here

+0

其实'SearchVectori'接受比字段名等。 您可以像我在[answer](https://stackoverflow.com/a/47497078/755343)中所写的那样在'SearchVector'中使用表达式。 –

相关问题