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
おそらく 'exceptions.ValidationError'であるべきです - ' ParseError'は、[docs](http://www.django-rest-framework.org/api-guide/exceptions/#parseerror)に従って不正なデータのために予約されています。 )、ValidationErrorは検証ガイドラインに合わない整形式データのためのものです。 – connorbode
@connorbode私は同じ考えをしていましたが、 'View'から' ValidationError'を呼び出そうとすると、サーバー500がスローされ、JSONレスポンスの代わりに 'Validation Error at ./../'と表示されます。私は 'ValidationError'がシリアライザに固執していると思います。わからない –