2014-10-14 10 views

Odpowiedz

3

Dzieje się tak, ponieważ django-rest-framework używa django na __search.

Od prąd najnowszy popełnić w Master of django-rest-framework:

def construct_search(self, field_name): 
    if field_name.startswith('^'): 
     return "%s__istartswith" % field_name[1:] 
    elif field_name.startswith('='): 
     return "%s__iexact" % field_name[1:] 
    elif field_name.startswith('@'): 
     return "%s__search" % field_name[1:] 
    else: 
     return "%s__icontains" % field_name 

I django docs opowiada o __search (Boolean wyszukiwania pełnotekstowego):

Note this is only available in MySQL and requires direct manipulation of the database 
to add the full-text index. By default Django uses BOOLEAN MODE for full text searches. 
See the MySQL documentation for additional details. 
5

To się zmieniło od @stalk odpowiedział. As of Django 1.10, Django Rest Framework może również obsługiwać PostgreSQL.

A ponieważ django.contrib.postgres zapewnia taką samą __search interface podobnie jak MySQL, można podłączyć API do PostgreSQL przy użyciu tej samej konfiguracji jak dla MySQL:

  • Dodaj django.contrib.postgres do INSTALLED_APPS.
  • W widoku, użyj @ symbol, aby oznaczyć pełnotekstowe pola wyszukiwania:

    search_fields = ('@title', '@description') 
    

W rzeczywistości, to brzmi jak pełnotekstowe wsparcie wyszukiwania Django dla MySQL jest albo przestarzałe lub jest co najmniej zmienia się, zgodnie z notatką o wycofaniu z linku do Django w oryginalnej odpowiedzi @ stalk. Notatka ta łączy się z następującym wyjaśnieniem, które zawiera również przykładowy kod do jego zastąpienia:

Wyszukiwanie wyszukiwania, które obsługuje tylko MySQL i ma bardzo ograniczone funkcje, jest przestarzałe. Zastąp go niestandardowym wyszukiwaniem ...

Przepraszam, nie mam wystarczającej reputacji, by publikować dodatkowe bezpośrednie linki.

Powiązane problemy