只更新models.Model中的特定字段
我有一个模型
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中的一个新function。 在早期版本中,可以使用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()
方法返回受更新影响的调查实例的数量。