モデルがあります
class Survey(models.Model):
created_by = models.ForeignKey(User)
question = models.CharField(max_length=150)
active = models.NullBooleanField()
def __unicode__(self):
return self.question
そして今、active
フィールドのみを更新したいと思います。だから私はこれをします:
survey = get_object_or_404(Survey, created_by=request.user, pk=question_id)
survey.active = True
survey.save(["active"])
エラーIntegrityError: PRIMARY KEY must be unique
が表示されるようになりました。
この方法で更新するのは正しいですか?
フィールドのサブセットを更新するには、 update_fields
を使用できます。
survey.save(update_fields=["active"])
update_fields
引数はDjango 1.5で追加されました。以前のバージョンでは、代わりに update()
メソッドを使用できました。
Survey.objects.filter(pk=survey.pk).update(active=True)
通常、1つ以上のモデルインスタンスの特定のフィールドを更新する正しい方法は、それぞれのクエリセットで update()
メソッドを使用することです。次に、次のようなことを行います。
affected_surveys = Survey.objects.filter(
# restrict your queryset by whatever fits you
# ...
).update(active=True)
この方法では、モデルは自動的に保存されるため、モデルでsave()
を呼び出す必要はありません。また、update()
メソッドは、更新の影響を受けた調査インスタンスの数を返します。