나는 모델이있다
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()
메서드는 업데이트의 영향을받은 설문 조사 인스턴스의 수를 반환합니다.