2014-10-14 5 views

risposta

3

Questo perché il django-rest-framework usa django __search.

Da ultimo corrente commettere in master di 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 

E django docs racconta __search (ricerca full-text booleana):

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

Questo è cambiato da quando @stalk risposto. As of Django 1.10, il Django Rest Framework può supportare anche PostgreSQL.

E poiché django.contrib.postgres fornisce la stessa __search interface come fa MySQL, è possibile collegare l'API per Postgres usando lo stesso setup come per MySQL:

  • Aggiungi django.contrib.postgres al vostro INSTALLED_APPS.
  • Secondo lei, utilizzare il simbolo @ per segnare le full-text campi di ricerca:

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

In realtà, suona come testo completo supporto di ricerca di Django per MySQL o è deprecato o non è almeno cambiando, secondo la nota di deprecazione sul link Django docs nella risposta originale di @ stalk. Che i collegamenti di nota per la seguente spiegazione, che contiene anche codice di esempio per la sua sostituzione:

La ricerca di ricerca, che supporta MySQL solo ed è estremamente limitato nelle caratteristiche, è deprecato. Sostituirlo con una ricerca personalizzata ...

Mi scuso, non ho abbastanza reputazione per pubblicare collegamenti diretti aggiuntivi.