2017-03-08 77 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'中使用表達式。 –

相關問題