【发布时间】:2014-09-26 06:12:28
【问题描述】:
我发现 django 1.7 现在支持 queryset 中的 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 created,但是对象没有保存在数据库中。可能是什么问题?
更新
原来是我的错。在Model2中,我定义了save方法,没有返回super(Model2, self).save(*args, **kwargs)
这就是它没有保存对象的原因。
【问题讨论】:
-
您如何验证对象是否已创建?
-
来自他们的documentation
created是一个布尔值,指定是否创建了一个新对象。另外,我查看了Model2的数据库,没有添加记录。
标签: django django-models django-queryset