2016-05-14 8 views
2

私はDjango RESTフレームワークを使い始めました。私がしようとしているのは、JSONでリクエストをPOSTし、そこからDjango Modelオブジェクトを作成し、オブジェクトを保存せずに使用することです。私のDjangoモデルはSearchRequestと呼ばれています。私が持っているもの:Django RESTシリアライザ:保存せずにオブジェクトを作成する

@api_view(['POST']) 
def post_calculation(request): 
    if request.method == 'POST': 
     #JSON to serializer object 
     serializer = SearchRequestSerializer(data=request.data) 
     if (serializer.is_valid() == False): 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
     mySearchRequestObject = serializer.save() 

これはSearchRequestオブジェクトを作成しますが、すぐにデータベースに保存します。私はそれを保存せずに必要とします。

+0

あなたのコードは、あなたが 'save()'を呼び出したことを示していませんか?または多分私は間違っている –

+0

最後の行:serializer.save() – Botond

答えて

4

ので、同じように、あなたのSearchRequestSerializerクラス

def create(self, validated_data): 
    return SearchRequest(**validated_data) 

に、このメソッドを追加し、機能post_calculationの代わりsaveでそれを呼び出す:

mySearchRequestObject = serializer.create() 
+0

ありがとう!少し説明していただけますか?私はそれをserializer.create(serializer.validated_data)でしか動作させることができませんでした。 – Botond

+0

OK、今すぐ取得します。私がしたのは、SearchRequest(** self.validated_data)を返すように変更することでした。 – Botond

+1

検証済みのデータをアンパックし、結果のキーワード引数を使用して 'SearchRequest'クラスをインスタンス化します。あなたが良いdjangoの日にクラスをインスタンス化したように –

1

をおGeneric Viewを使用して、または直接mixins.CreateModelMixinを使用している場合あなたの視点では、perform_createメソッドでオブジェクトにアクセスする必要がある状況に自分自身がいるかもしれません。あなたは、保存せずにオブジェクトを作成するために、モーセKoledoyeのアイデアを使用することができます。

def perform_create(self, serializer): 
    # Create an instance WITHOUT saving 
    instance = self.model(**serializer.validated_data) 
    # ... do more stuff with the instance 
    # ... 
    # THEN, if you need to save the instance later 
    instance.save() 

これは悪いかもしれないあなたは、インスタンスへのアクセスを提供しますが、それを保存する必要があり、このperform_create方法で行instance = serializer.save()を有することに反対していますこのよう

  • としていくつかの方法、あなたは
  • インスタンスを作成することができます前に、あなたはそれを2回保存する必要がありますので、あなたは、そのデータの一部を操作するためにアクセスするために存在するインスタンスを必要とするモデルのメソッドにアクセスする必要があります
関連する問題