2017-05-11 15 views
1

の目的は、シリアライザフィールドにdefault=CreateOnlyDefault(<arg>)ジャンゴRESTフレームワーク:DjangoのRESTフレームワーク<a href="http://www.django-rest-framework.org/api-guide/validators/#createonlydefault" rel="nofollow noreferrer">docs</a>によるとCreateOnlyDefault

を渡すと操作を作成する時にのみ、デフォルトの引数を設定しに使用することができます。更新中、フィールドは省略されます。

これは、作成操作中に使用されるデフォルト値または呼び出し可能な1つの引数をとります。どのように

これは<arg>は、単一の引数はあなたがCreateOnlyDefaultに渡すだろうということですread_only=True, default=<arg>を、宣言は異なるのですか?

答えて

2

CreateOnlyDefaultを使用すると、値は更新時ではなく作成時にのみ使用されます。例えば

createdフィールドは作成から同じにとどまるのに対し、そのシリアライザと

class MySerializer: 
    created = serializers.DateTimeField(
     read_only=True, 
     default=serializers.CreateOnlyDefault(timezone.now) 
    ) 
    modified = serializers.DateTimeField(
     read_only=True, 
     default=timezone.now 
    ) 

modifiedフィールドは、すべての更新上のすべてを更新されます。

+0

ああ!フィールドに 'read_only = True'があれば同じことになると思っていましたが、動的な値(' timezone.now'など)の場合は結果が異なります。このケースを指摘してくれてありがとう! - フリップサイドでは、値が一定であれば効果的な違いはないと結論づけます。 ( 'UPDATE' SQL文に、' CreateOnlyDefault'が使用されているかどうかに応じて、問題のフィールドを含むか含まないかの違いがあります)。 – peterthomassen

1

これは、APIクライアントによって提供されるかどうかを意味するので、何も提供されていないかどうかをバリデーターでチェックすると、デフォルト値が作成されます。

+0

これは単に「default = 」と違いますか? – peterthomassen

関連する問題