仅更新models.Model中的特定字段

时间:2012-12-16 12:21:38

标签: django django-models django-views django-database

我有一个模特

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

我是否正确使用此方法进行更新?

2 个答案:

答案 0 :(得分:125)

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

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

Django 1.5中添加了update_fields参数。在早期版本中,您可以改为使用update()方法:

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

答案 1 :(得分:16)

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

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

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