我想我需要做的是覆盖模型的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)已经存在
所以我不太确定该怎么做。