2015-09-19 36 views
6

query_paramsが指定されている場合にのみmodel_infoを返したい場合は、エラーメッセージを表示する必要があります。Django Rest Frameworkのquery_paramsのバリデーション

私は以下のコードを試しましたが、クエリパラメータで名前が渡されなかったときにキーエラーが発生しています。私はそれが私のすべての結果が返されますgetメソッドを使用する場合、私は、私も改ページを使用していますので、getメソッドを使用することはできません

from rest_framework.validators import ValidationError 

class ModelSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ModelName 
     fields = ('name', 'abbreviation') 

    def validate_name(self, value): 
     if value: 
      return value 
     else: 
      raise ValidationError('Enter name') 



class ModelNameListList(generics.ListCreateAPIView): 
    renderer_classes = (JSONRenderer,) 
    serializer_class = ModelSerializer 

    def get_queryset(self): 
     queryset = ModelName.objects.all() 
     name = self.request.query_params['name'] 
     queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all() 
     return queryset 

def get_queryset(self): 
     queryset = ModelName.objects.all() 
     name = self.request.query_params.get('name', None) 
     if name: 
      queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all() 
     else: 
      raise exceptions.ParseError("name not supplied") 
     return queryset 

はあなたがいつも戻ってきていることを確認する必要があります

私は応答オブジェクトを取得していますget_querysetのコードの下に使用しています。この機能では何の長さ

def get_queryset(self): 
     queryset = ModelName.objects.all() 
     name = self.request.query_params.get('name', None) 
     if name: 
      queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all() 
     else: 
      content = {'errors': 'name is missing'} 
      return Response(content) 
     return queryset 

答えて

2

を持っていませんあなたがそれをどのように扱いたいのかがわかっていれば例外を発生させます。

+3

おそらく 'exceptions.ValidationError'であるべきです - ' ParseError'は、[docs](http://www.django-rest-framework.org/api-guide/exceptions/#parseerror)に従って不正なデータのために予約されています。 )、ValidationErrorは検証ガイドラインに合わない整形式データのためのものです。 – connorbode

+0

@connorbode私は同じ考えをしていましたが、 'View'から' ValidationError'を呼び出そうとすると、サーバー500がスローされ、JSONレスポンスの代わりに 'Validation Error at ./../'と表示されます。私は 'ValidationError'がシリアライザに固執していると思います。わからない –

関連する問題