gpt4 book ai didi

django - update_or_create 不更新/创建对象

转载 作者:行者123 更新时间:2023-12-02 08:53:30 28 4
gpt4 key购买 nike

我发现 django 1.7 现在支持查询集中的 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已创建,但该对象未保存在数据库中。可能是什么问题?

更新

事实证明这是我的错误。在 Model2 中,我定义了 save 方法,但不返回 super(Model2, self).save(*args, **kwargs)
这就是它没有保存对象的原因。

最佳答案

也许您验证的方式错误,因为我使用您的模型创建了项目,并且一切正常。就我而言,我正在验证该对象是使用 objects.get() 创建/更新的并打印值:

In [1]: from app1 import models

In [2]: m1 = models.Model1.objects.create(name=1, status=1)

In [3]: m1
Out[3]: <Model1: Model1 object>

In [4]: datadict ={'field1' : 1, 'field2':2,}

In [6]: model2, created = models.Model2.objects.update_or_create(model=m1, defaults=datadict)

In [7]: model2, created
Out[7]: (<Model2: Model2 object>, True)

In [8]: models.Model2.objects.get().field1, models.Model2.objects.get().field2
Out[8]: (u'1', u'2')

In [9]: datadict ={'field1' : 3, 'field2':4}

In [10]: model2, created = models.Model2.objects.update_or_create(model=m1, defaults=datadict)

In [11]: model2, created
Out[11]: (<Model2: Model2 object>, False)

In [12]: models.Model2.objects.get().field1, models.Model2.objects.get().field2
Out[12]: (u'3', u'4')

In [13]: models.Model2.objects.get().model.id
Out[13]: 1

In [14]: models.Model1.objects.get().id
Out[14]: 1

关于django - update_or_create 不更新/创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26053148/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com