仅更新模型中的特定字段

我有个模特

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

我用这种方法更新对吗?

150353 次浏览

通常,更新一个或多个模型实例中的某些字段的正确方法是在相应的查询集上使用 update()方法。然后你这样做:

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

这样,您就不需要在您的模型上调用 save()了,因为它会自动保存。此外,update()方法返回受更新影响的调查实例的数量。

要更新字段的子集,可以使用 update_fields:

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

update_fields参数是在 Django 1.5中添加的:

Survey.objects.filter(pk=survey.pk).update(active=True)