2017-08-27 14 views
1
def validate_number_of_product(products): 
    if len(products) > 1: 
     # this may be temporary 
     raise ValidationError(_('Too many products.')) 


class OrderAddSerializer(serializers.ModelSerializer): 
    products = serializers.PrimaryKeyRelatedField(
     queryset=Product.objects.filter(sold=False), 
     write_only=True, 
     validators=[validate_number_of_product], 
     many=True, allow_empty=False, 
    ) 

    # ... 

私はPrimaryKeyRelatedFieldmany=Trueを使用しており、フィールドを(独立して)検証する必要があります。しかし、OrderAddSerializer.is_valid()を呼び出すときにvalidate_number_of_productが呼び出されていないようです。これはDRFの制限ですか、私は間違って使用していますか?`many`がTrueの場合、` validators`キーワードの引数は機能しませんか?

答えて

0

many=Trueは、想定した動作とは異なる動作をします。 シーンの背後にListSerializerを作成してリスト部分を処理し、各インスタンスを「初期」シリアライザに委譲します。

OrderAddSerializerの代わりにListSerializerにバリデータを指定する必要があります。

documentationは、ListSerializerの初期化をカスタマイズする方法を説明しています。 the sourceのように、バリデータはLIST_SERIALIZER_KWARGSからinitから除外されます。

+0

これは参考になります。ありがとう! –

関連する問題