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

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

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

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

于 2012-12-16T12:36:34.413 回答