0

この例を自分のコンピューターで実行しようとしましたが、Python を再起動すると、驚くべきことに、作成されたポーリングが保存ステートメントなしでデータベースに保存されます。

コードは次のとおりです。

>>> from polls.models import Poll, Choice
>>> Poll.objects.all()[0].choice_set.create(choice='Not much', votes=0)
<Choice: Not much>

では、どのステートメントによって保存命令が暗示されているのだろうか? このように作成すると、再起動しても生き残れないからです。

>>> c = Choice(choice='Not much3', votes=0)
>>> c.poll_id = 1

選択肢を作成し、外部キー poll_id を最初のポーリングに割り当てています。私は保存しなかったので、これが続くべきではないことを知っています。それは私をだます最初のものです。関連付けられたセット内で作成すると、適切な外部 ID を与えるだけでなく、自動的に保存されると思います。

私はPythonも初めてで、この問題に関する以前の経験に基づいて、セマンティクスは少し緩いように見えました. 最初のコードは、データベースに保存するのではなく、適切な外部 ID を割り当てるだけだと思います。

4

1 に答える 1

1

ドキュメントで指定されているように、QuerySet で create() メソッドを使用すると、オブジェクトが自動的に保存されます。

これは事実上、SQL INSERT ステートメントと考えることができます。

于 2012-12-27T00:04:22.760 に答える