Django编辑行而不是添加新行

2024-10-06 12:35:09 发布

您现在位置:Python中文网/ 问答频道 /正文

这样的代码会编辑表中的唯一行而不是创建新行,这有什么原因吗

newStudent = Student(name=var.name,
                     mark=var.mark,
                     year=newyear)
newStudent.save()

说明:

我正在整理学生档案。此视图在我更新学生信息时调用。 var.name是学生在编辑前的姓名,var.mark是学生在编辑前的标记newyear是我添加此信息的年份

此视图每年调用一次(即,学生每年都有一个新名称和标记)。在这些行之后,我继续编辑学生的当前年份信息

问题:

此代码编辑数据库中Student表中的唯一行,而不是添加新行


Tags: 代码name标记视图信息编辑var原因
3条回答

如果在创建对象时使用现有主键,则可以更新对象

student =  Student(name=var.name,
                     mark=var.mark,
                     year=newyear) 
student.save() # this means create new object



student =  Student(pk=existed_pk,name=var.name,
                     mark=var.mark,
                     year=newyear) 
student.save() # this means update student record which has existed_pk pk

您可以使用update_or_create方法,这是一种方便的方法,用于更新具有给定名称的对象,并在必要时创建一个新的对象。默认值是用于更新对象的(字段、值)对字典

 obj, created = Student.objects.update_or_create(name=var.name, defaults={mark=var.mark, year=newyear})

返回(object,created)的元组,其中object是已创建或更新的对象,created是指定是否创建新对象的布尔值

如果希望创建对象,请使用django的模型管理器方法来创建对象,即:

Student.objects.create(name=var.name, mark=var.mark, year=newyear)

这将确保显式创建,而不是使用现有值获取行

相关问题 更多 >