我想使用update_or_create方法更新模型的对象。但是当我使用它时,会创建另一个对象。 我的models.py:
class SubmitHobby(models.Model):
M_id=models.IntegerField(default=0)
name=models.CharField(max_length=255)
mob=models.IntegerField(default=0,blank=True,null=True)
is_approve=models.BooleanField(default=False)
我想在M_id(M_id = 234)的基础上更新is_approve
字段。
def approve(request):
context = RequestContext(request)
name= = request.GET.get('name')
mid=request.GET.get('M_Id')
obj=SubmitHobby.objects.update_or_create(M_id=mid)
obj.is_approve=True
obj.save()
答案 0 :(得分:4)
update_or_create
会返回一对(model_instance, bool)
。此外,您需要提供应将现有记录标识为**kwargs
的字段以及要更新为dict
至defaults
的值:
obj, created = SubmitHobby.objects.update_or_create(
defaults={'is_approve': True},
M_id=mid
)
如果没有defaults
,您可能也会选择好get_or_create
。
答案 1 :(得分:1)
您只需要获取所需的对象,设置需要更改和保存的值,对象就会更新。
obj = modelname.objects.get(pk=<id>)
obj.field=<value>
obj.save()
答案 2 :(得分:0)
您的模型没有设置主键,因此Django会为您设置一个主键。因此,您可以拥有多个具有相同M_id
的对象。如果您想拥有唯一的M_id,我建议您将模型更新为:
class SubmitHobby(models.Model):
M_id=models.IntegerField(primary_key=True)
name=models.CharField(max_length=255)
mob=models.IntegerField(default=0,blank=True,null=True)
is_approve=models.BooleanField(default=False)