[django] 모델의 특정 필드 만 업데이트합니다.

나는 모델이있다

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)


답변

일반적으로 하나 이상의 모델 인스턴스에서 특정 필드를 업데이트하는 올바른 방법은 update()각 쿼리 세트 에서 메서드 를 사용하는 것입니다. 그런 다음 다음과 같이합니다.

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

이렇게하면 save()모델이 자동으로 저장되기 때문에 더 이상 모델 을 호출 할 필요가 없습니다 . 또한이 update()메서드는 업데이트의 영향을받은 설문 조사 인스턴스의 수를 반환합니다.


답변