2015-06-24 35 views
8

Desidero filtrare il mio modello con django-filter. Funziona bene se filtro da un id come:DjangoFilterBackend con ID multipli

http://localhost:8000/accommodations?accommodationType_id=1 

Ma non so come posso filtrare da più ID come.

http://localhost:8000/accommodations?accommodationType_id=1,2 

mio attuale ViewSet assomiglia a questo:

class AccommodationViewSet(viewsets.ReadOnlyModelViewSet): 
    """ 
     REST API endpoint for 'accommodation' resource 
    """ 
    queryset = Accommodation.objects.all() 
    serializer_class = AccommodationSerializer 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_fields = ('accommodationType_id', 'name') 

spero che ci sia una soluzione.

+0

Forse si è tentato: 'http: // localhost: 8000/alloggi accommodationType_id = 1 & accommodationType_id = 2' – mariodev

+0

Sì, un Ottengo l'ultimo oggetto con accommodationType_id = 2 – abuder

risposta

9

ho trovato la seguente soluzione per il mio problema :)

https://gist.github.com/aBuder/654fb945f085b17358d8

from webapp.serializers import * 
from rest_framework import viewsets 
from rest_framework import filters 
from django_filters import Filter, FilterSet 


class ListFilter(Filter): 
    def filter(self, qs, value): 
     if not value: 
      return qs 

     # For django-filter versions < 0.13, use lookup_type instead of lookup_expr 
     self.lookup_expr = 'in' 
     values = value.split(',') 
     return super(ListFilter, self).filter(qs, values) 


class AccommodationFilter(FilterSet): 
    ids = ListFilter(name='id') 
    accommodationType_ids = ListFilter(name='accommodationType_id') 

    class Meta: 
     model = Accommodation 
     fields = ['ids', 'accommodationType_ids'] 


class AccommodationViewSet(viewsets.ReadOnlyModelViewSet): 
    """ 
     REST API endpoint for 'accommodation' resource 
    """ 
    queryset = Accommodation.objects.all() 
    serializer_class = AccommodationSerializer 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_class = AccommodationFilter 
+0

Grazie! Questo mi ha aiutato molto. Se hai altri suggerimenti ora che ci hai lavorato, lo apprezzerò davvero! Ho bisogno di ottenere articoli basati su una lista spesso – Diesel