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