Django如何更新记录而不是在重复的id上引发错误

时间:2018-08-20 22:28:37

标签: django django-models

我想我需要做的是覆盖模型的save方法,但是如果我错了/有更好的建议,请纠正我。

这是我的模型的样子:

class MergingModel(models.Model):
   some_field = models.TextField()

这是我要通过的单元测试:

  class MergingModelTests(TestCase):
      def test_duplicates_are_overwriten(self):
          MergingModel.create(id=1)
          MergingModel.create(id=1, some_field="abc")

          self.assertEquals(MergingModel.objects.count(),1)
          self.assetEquals(MergingModel.objects.get(id=1).some_field,"abc")

我尝试覆盖save方法来检查是否存在带有id=x的记录,但是引发了递归错误,我的save方法代码如下:

def save(self, *args, **kwargs):
    if MergingModel.objects.filter(id__exact=self.id):
       original = MergingModel.objects.get(id=self.id)
       original.some_field = self.some_field 
       original.save()
    else:
       super().save( *args, **kwargs)

然后我尝试覆盖create,但出现错误:

  

密钥(id)=(ID1)已经存在

所以我不太确定该怎么做。

0 个答案:

没有答案