2017-05-15 2 views
0

Swagger UI sendet boolesche Parameter in 'true/false' -Form, während boolesches Django-Filter-Feld True/False (Großbuchstaben) erwartet. Deshalb, wenn ich durch swagger abfrage, hat das Feld is_published keine Wirkung.Swagger boolescher Parameterwert True/False anstelle von true/false und django_filters

{{api_url}}/api/v1/games/?limit=10&offset=0&is_published=true 
{{api_url}}/api/v1/games/?limit=10&offset=0&is_published=false 

Filterfeld ist definiert als

is_published = BooleanFilter(name='versions__is_published') 

vollständige Definition

class GameFilter(FilterSet): 
    """Custom filter for ``GameViewSet``. 

    Defines custom filter for ``genres`` field (based on TaggableManager). 

    """ 

    is_published = BooleanFilter(name='versions__is_published') 

    class Meta: 
     model = Game 

     fields = { 
      'platforms': ['exact'], 
      'ages':  ['exact'], 
      'developers': ['exact'], 
      'genres':  ['exact'], 
      'created': ['gt', 'lt'] 
     } 

Swagger Definition des Verfahrens

get: 
    summary: Get list of games 
    operationId: getGamesList 
    parameters: 
    - $ref: '../../parameters.yaml#/Offset' 
    - $ref: '../../parameters.yaml#/Limit' 
    - $ref: '../../parameters.yaml#/PlatformsFilter' 
    - $ref: '../../parameters.yaml#/DevelopersFilter' 
    - $ref: '../../parameters.yaml#/GenresFilter' 
    - $ref: '../../parameters.yaml#/AgesFilter' 
    - $ref: '../../parameters.yaml#/SearchFilter' 
    - $ref: '../../parameters.yaml#/Order' 
    - name: is_published 
     in: query 
     type: boolean 
     required: false 
     default: true 

enter image description here

Antwort

1

Lösung:

Die Basis django_filters.FilterSet Ansichten mit Vanille Django verwendet werden soll. Wenn Sie eine API mit DRF erstellen, sollten Sie django_filters.rest_framework.FilterSet verwenden, da sie einen etwas anderen Filtersatz verwendet, der für die Verwendung in einer API besser geeignet ist. In diesem Fall akzeptiert der BooleanFilter Klein-/Klein-Werte.

Nach bereinigtes Import:

from django_filters import ModelMultipleChoiceFilter 
from django_filters.rest_framework import BooleanFilter, FilterSet 
Verwandte Themen