0

Djangoを学習しており、djangobook.comを参照しています。 (説明)私はいくつかのデータを移入(デモに記載されているように)、レコードの特定のフィールドの値を更新しようとした選択したオブジェクトのコレクションを使用してDjangoモデルを更新する

class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    address = models.CharField(max_length=50) 
    city = models.CharField(max_length=60) 
    state_province = models.CharField(max_length=30) 
    country = models.CharField(max_length=50) 
    website = models.URLField() 

    def __unicode__(self): 
     return self.name 

この作品:

私はこのようなモデルを有します

>>> publisher_list = Publisher.objects.all() 
>>> p = publisher_list[0] 
>>> p.name = u'Apress' 
>>> p.save() 

私は以下を試してみると(これは上記と同じです)、動作しません。データベース内の名前は更新されません。私はここで間違って何をしていますか?

>>> publisher_list = Publisher.objects.all() 
>>> publisher_list[0].name = 'Apress' 
>>> publisher_list[0].save() 

参考:http://djangobook.com/en/2.0/chapter05/

感謝。

+1

あなたが参照しているDjango Bookが*真剣に*古くなってきていることにご注意ください。 Djangoはちょうどrev 1.4に行きました。これは、Django 1.0から多くの重要な点で(そして3年以上)変化しています。現在のドキュメントとチュートリアルは*優れているため、代わりに使用してください。 –

+0

@PeterRowell:ありがとう。それを調べます。 – bdhar

答えて

2

インデックス作成では、データベースからモデルを複数回取得しています。変異させて保存する前に、モデルを名前にバインドします。 qs[0]によって、たとえば、項目によって取得、QuerySet.__getitem__()による

1

は、キャッシュされていないと、各アクセスするためのDBにヒットする、ない限り、クエリセットが評価されているので、キャッシュが満たされています

>>> qs = User.objects.all()[:10] 
>>> qs[0] is qs[0] # Similar with your issue, you modified the attribute of the first and tried to save the latter. 
False 
>>> len(qs) # evaluate and fill cache 
10 
>>> qs[0] is qs[0] 
True 

だから、

  • イグナシオの答えに従うか、単にp = Publisher.objects.all()[0]
  • か、評価することができ索引付けの前にクエリーセット。これが簡単かどうかは、コードロジックに依存します。
関連する問題