DRFには、「すべての人」を更新するようにシステムに指示する機能があります。そのリストを維持してください(私はこの例をダムにします、私はユースケースを一般化しようとしています)。どのユーザーが今日サインインしているかを調べるためにクエリを実行し、それらのユーザーをループして賞品を与えるための新しい活動を作成したいと考えています。Django RESTフレームワークのserializer.save()へのループ処理
書き込み時にループの最後の値を格納しているように見えます。
time_threshold = datetime.now() - timedelta(hours=12)
signed_in_list = Activity.objects.filter(created__gte=time_threshold, activity="signed in")
for activity in signed_in_list:
serializer.save(user=activity.user_id, activity="gets free prize")
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED,
headers=headers)
"signed_in_list"から返された各ユーザーIDに新しいアクティビティが書き込まれるようにしています。
私は新しいアクティビティエントリがループの各user_idに書き込まれると予想していましたが、ループ内の最後のuser_idを実行しています。これは、私がserializer.saveが動作していると思うのですが、ループのたびにそれ自身を上書きします(DBへの書き込みを実行するのと比べて)。
感謝と呼ばれる、私は質問のためのそれをより汎用的にするためにしようとしたとき、それがごちゃ混ぜになったと思います。私はあなたが指摘したコードのロジックと一致するように修正しました。これは、serializer.saveのように見えますが、このループ内で毎回実行するかわりに、create関数の終了として実行されます。 – probbins222
上記の例では、リスト内の最後の項目に対してのみDB書き込みを実行します。 – probbins222