如何在django中部分更新记录而不指定整个字段?

时间:2017-07-10 12:32:54

标签: python django

我使用save()方法在Django中创建记录。使用相同的save()方法和主键来更新相应的记录。但每次我都无法指定更新中所有字段的值。这是删除我在创建期间添加的现有数据。那么,通过仅指定必填字段来执行部分更新的最佳方法是什么。?

MODEL

class ApprenticeUsers(models.Model):

   uid = models.IntegerField(primary_key = True)
   apid = models.CharField(max_length=60, blank=False)
   first_name = models.CharField(max_length=64, blank=False)
   last_name = models.CharField(max_length=64, blank=False)

视图

def insert_apprenticeship_data(user_details, table_obj):


  table_obj = table_obj()
  for field in  user_details:
     setattr(table_obj,field, user_details[field])
  try:    
     table_obj.save()
  except:
     return False

示例数据通过视图

({uid:123, apid:"AP12"}, ApprenticeUsers)

此处uid是主键

2 个答案:

答案 0 :(得分:4)

正常模式是从数据库中检索项目,更新相关字段并将其保存回来。您缺少第一步,并且每次都在构建一个新项目。

请注意,实现目标的更好方法是使用ModelForm;除了更新之外,它还将负责验证数据是否应该如此。或者,如果这是一个API,您可以使用django-rest-framework编写一个执行相同操作的Serializer。

答案 1 :(得分:3)

模型.save()方法有一个参数update_fields,您还可以指定在保存时应更新哪些字段。见https://docs.djangoproject.com/en/1.11/ref/models/instances/#specifying-which-fields-to-save