114

私はモデルを持っています

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た。

この方法で更新するのは正しいですか?

4

2 に答える 2

228

フィールドのサブセットを更新するには、次を使用できますupdate_fields

survey.save(update_fields=["active"]) 

update_fields引数は Django 1.5 で追加されました。update()以前のバージョンでは、代わりに次のメソッドを使用できました。

Survey.objects.filter(pk=survey.pk).update(active=True)
于 2012-12-16T12:59:28.707 に答える
20

通常、1つ以上のモデルインスタンスの特定のフィールドを更新する正しい方法はupdate()、それぞれのクエリセットでメソッドを使用することです。次に、次のようなことを行います。

affected_surveys = Survey.objects.filter(
    # restrict your queryset by whatever fits you
    # ...
    ).update(active=True)

save()このように、モデルは自動的に保存されるため、モデルを呼び出す必要はありません。また、このupdate()メソッドは、更新によって影響を受けた調査インスタンスの数を返します。

于 2012-12-16T12:36:34.413 に答える