Python Django编辑行而不是添加新行
这样的代码会编辑表中的唯一行而不是创建新行,这有什么原因吗Python Django编辑行而不是添加新行,python,django,Python,Django,这样的代码会编辑表中的唯一行而不是创建新行,这有什么原因吗 newStudent = Student(name=var.name, mark=var.mark, year=newyear) newStudent.save() 说明: 我正在整理学生档案。此视图在我更新学生信息时调用。 var.name是学生在编辑前的姓名,var.mark是学生在编辑前的分数。新年是我为之添加此信息的一年 该视图每年调用一次,即
newStudent = Student(name=var.name,
mark=var.mark,
year=newyear)
newStudent.save()
说明:
我正在整理学生档案。此视图在我更新学生信息时调用。
var.name是学生在编辑前的姓名,var.mark是学生在编辑前的分数。新年是我为之添加此信息的一年
该视图每年调用一次,即学生每年都有一个新的名称和标记。在这些行之后,我继续编辑学生的当前年份信息
问题是:
此代码编辑数据库中Student表中的唯一行,而不是添加新行 如果希望创建对象,请使用django的模型管理器方法来创建对象,即:
Student.objects.create(name=var.name, mark=var.mark, year=newyear)
这将确保显式创建,而不是使用现有值获取行 如果希望创建对象,请使用django的模型管理器方法来创建对象,即:
Student.objects.create(name=var.name, mark=var.mark, year=newyear)
这将确保显式创建,而不是使用现有值获取行 如果在创建对象时使用现有主键,则可以更新对象
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
如果在创建对象时使用现有主键,则可以更新对象
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_或_create方法,这是一种方便的方法,用于更新具有给定名称的对象,并在必要时创建一个新对象。默认值是用于更新对象的字段、值对的字典
obj, created = Student.objects.update_or_create(name=var.name, defaults={mark=var.mark, year=newyear})
返回object(已创建)的元组,其中object是已创建或更新的对象,created是一个布尔值,指定是否创建了新对象。您可以使用update\u或\u create方法,这是一种方便的方法,用于使用给定名称更新对象,并在必要时创建新对象。默认值是用于更新对象的字段、值对的字典
obj, created = Student.objects.update_or_create(name=var.name, defaults={mark=var.mark, year=newyear})
返回object的元组,created,其中object是已创建或更新的对象,created是一个布尔值,指定是否创建了新对象。可能是因为您向学生提供了相同的记录,所以会发生这种情况。为什么说相同的记录?我100%肯定年份正在改变,因为这就是我如何计算视图编辑记录而不是添加新记录的原因可能是因为您向学生提供了相同的记录为什么您指的是相同的记录?我100%肯定年份正在改变,因为这就是我如何计算视图编辑记录而不是添加新记录的方法。你说得对。显然,我的主键有问题,阻止视图创建新记录。我会在6分钟内把你的答案标对。你可以在6分钟内接受答案你是对的。显然,我的主键有问题,阻止视图创建新记录。我会在6分钟内把你的答案标对。你可以在6分钟内接受答案