如何更新模型中的字段而不在django中创建新记录?

时间:2010-09-10 00:56:24

标签: django django-models

我在django中有一个模型,我只想更新,也就是说,当我调用它并设置数据时,它不会创建新记录,只会更新现有记录。我怎样才能做到这一点?这就是我所拥有的:

class TemperatureData(models.Model):   
    date = models.DateTimeField()   
    value = models.PositiveIntegerField()   
    alert = models.BooleanField()

5 个答案:

答案 0 :(得分:65)

如果从数据库中获取模型实例,则调用save方法将始终更新该实例。例如:

t = TemperatureData.objects.get(id=1)
t.value = 999  # change field
t.save() # this will update only

如果您的目标是阻止任何INSERT,那么您可以覆盖save方法,测试主键是否存在并引发异常。有关更多详细信息,请参阅以下内容:

答案 1 :(得分:9)

理想情况下你应该这样做

t = TemperatureData.objects.get(id=1)
t.value = 999
t.save(['value'])

这允许您指定应保存哪个列,并保留其当前在数据库中的剩余列。 (https://code.djangoproject.com/ticket/4102)!

答案 2 :(得分:3)

有时可能需要自动执行对数据库的一个更新请求的更新,而无需先读取它。

如果get-set attribute-save也可能会引起问题,如果这些更新可以同时进行,或者您需要根据旧的字段值设置新的值。

在这种情况下,query expressionsupdate可能会有用:

TemperatureData.objects.filter(id=1).update(value=F('value') + 1)

答案 3 :(得分:2)

Django在他们的网站上有一些关于这方面的文档,请参阅:Saving changes to objects。总结一下:

  

..要保存对已存在于数据库中的对象的更改,请使用save()

答案 4 :(得分:1)

在我的情况下,我想根据他的ID更新状态

student_obj = StudentStatus.objects.get(student_id=101)
student_obj.status= 'Enrolled'
student_obj.save()

或者,如果您想要Student_Info表中的最后一个ID,则可以使用以下代码。

student_obj = StudentStatus.objects.get(student_id=StudentInfo.objects.last().id)
student_obj.status= 'Enrolled'
student_obj.save()