1
私はcreated_atフィールドを持つクライアントモデルを持っています。私は、クライアントのcreated_atをシェルから更新したいと思っています。私は次のようでした:インデックスによるDjango Querysetのアクセス
>>> c = Client.objects.all()
>>> c[1].created_at
>>> # I get nothing here since it's not set yet
>>> from django.utils import timezone
>>> c[1].created_at = timezone.now()
>>> c[1].save()
>>> c[1].created_at
>>> # I still get nothing here. Even when I reload the queryset, I get nothing.
しかし、私はc = Client.object.get(id=1)
と同じことを行うとき、それは動作します。なぜこれが起こるのですか?
感謝を編集して、保存されます、はい、それは動作します。なぜこれは起こるのですか?私は困惑している。 –
これは、クエリーセット内のオブジェクトがメモリに保存されず、クエリーセットがオブジェクトのコピーにすぎないためです。実際のオブジェクトを取得する(つまり、オブジェクトを更新して保存する)には、メモリ内の変数に割り当てる必要があります。 – awwester
実際はありません。すべてのスライス操作でデータベースに新しいクエリが実行され、新しいオブジェクトが返されるからです。したがって、最初の 'c [1]'は後続の 'c [1]'に接続されていません。 –