2012-07-27 10 views
5

Eventuali duplicati:
Django Tastypie Advanced Filtering: How to do complex lookups with Q objectsLa combinazione di filtri in una query in Tastypie

Ho un modelRseource tastypie che assomiglia a questo:

class TaggedResource(ModelResource): 
    tags = ListField() 
    user = fields.ForeignKey(UserProfileResource, 'user') 

    class Meta: 
     queryset = Media.objects.all().order_by('-timestamp') 
     authorization = MediaAuthorization() 
     detail_allowed_methods = ['get', 'post', 'put', 'delete','patch'] 

    filtering = { 
     #'user': ALL_WITH_RELATIONS, 
     #exact is date, lt is less than lte less than equal to, etc 
     'timestamp': ['exact', 'range', 'lt', 'lte', 'gte', 'gt'], 
     'social_source': ALL, 
     'media_type': ALL, 
     'comment': ['exact', 'startswith', 'endswith', 'contains'], 
     'media_text': ['exact', 'startswith', 'endswith', 'contains'], 
    } 

ho bisogno di avere un Operatore OR tra i filtri e piacerebbe combinare la query in un parametro. Ad esempio, voglio restituire oggetti che contengono la parola filtro "test" dal campo di commento OR campo media_text.

Questo sarebbe l'ideale: http:? Mysite.com/api/v1/tagged q = test

dove 'q' esegue un OR filtro per entrambi i campi.

È fattibile?

UPDATE: Ecco cosa sto lavorando con filtri avanzati, ma non sono davvero sicuro di come ottenere un'istruzione OR:

def build_filters(self, filters=None): 
    if filters is None: 
     filters = {} 

    orm_filters = super(TaggedResource, self).build_filters(filters) 

    if 'q' in filters: 
     orm_filters['comment__contains'] = filters['q'] 
     orm_filters['media_text__contains'] = filters['q'] 
    return orm_filters 

risposta

1

vorrei suggerire a guardare Advanced Filtering anche se io' non sono sicuro che è fattibile . Ma se si esegue l'override di build_filters, si ha accesso all'intera Risorsa ed è possibile definire tali filtri che attraversano più di un campo.

+0

Sì, stavo cercando nel filtro avanzato e davvero non ho idea di come farei una dichiarazione OR. Quello che ho sta filtrando con una condizione AND. – bevinlorenzo

+0

Ho aggiunto il mio filtro avanzato alla domanda originale. – bevinlorenzo

+0

Quello che intendevo in realtà è che devi definire il tuo filtro, e poi questo è il posto dove puoi aggiungerlo al filtro di gusto. –

Problemi correlati