如何使用update_or_create更新django中的模型对象

时间:2016-06-16 09:43:31

标签: python django

我想使用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()

3 个答案:

答案 0 :(得分:4)

update_or_create会返回一对(model_instance, bool)。此外,您需要提供应将现有记录标识为**kwargs的字段以及要更新为dictdefaults的值:

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)