我发现,Django 1.7现在支持queryset中的update_or_create()方法。 但是,当我尝试它,它不工作。有没有创造,当我尝试这个对象:update_or_create不更新/创建对象
models.py
class Model1(models.Model):
name = models.CharField(max_length=100)
status = models.CharField(max_length=100)
user = models.ForeignKey(User, null=True, blank=True)
class Model2(models.Model)
model = models.ForeignKey(Model1, null=True, blank=True)
field1 = models.CharField(max_length=100)
field2 = models.CharField(max_length=100)
user = models.ForeignKey(User, null=True, blank=True)
views.py
def ModelUpdate(request)
model1 = get_object_or_404(Model1, pk=request.POST['lid'])
model1.status =2
model1.save()
#based on the model1, we want to create or update model2
datadict ={'field1' : 1, 'field2':2,}
model2, created = Model2.objects.update_or_create(model=model1,
defaults=datadict)
if created:
print('model2 obj created') #for checking purpose
else:
print('model2 obj not created')
return render(request,'updated.html', {'update':'updated'})
我可以看到消息MODEL2 OBJ创建但对象未保存在数据库中。可能是什么问题呢?
UPDATE
原来是我的错。在Model2中,我定义了保存方法而不返回super(Model2, self).save(*args, **kwargs)
这就是为什么它没有保存对象。
你是如何验证创建对象? – 2014-09-26 09:31:54
从他们的[文档](https://docs.djangoproject.com/en/1.7/ref/models/querysets/#update-or-create)'created'是一个布尔值,指定是否创建了一个新对象。另外,我查看了Model2的数据库,没有添加记录。 – 2014-09-26 12:21:16