Django self.assertEqual比较2个新的未保存对象

时间:2019-04-09 02:51:41

标签: python django

让我们说我有一个CustomerProfile模型

class CustomerProfile(models.Model):
    billing_profile = models.ForeignKey(...)

当我在两个未保存的对象上运行assertEqual时,它会引发AssertionError

self.assertEqual(
    CustomerProfile(billing_profile=default_profile), 
    CustomerProfile(billing_profile=default_profile)
)

给出以下错误:

AssertionError: <CustomerProfile: Full Charge None> != <CustomerProfile: Full Charge None>

我不明白为什么,因为实例ID由于未保存而不会被填充。

1 个答案:

答案 0 :(得分:2)

assertEqual中没有用于比较Django模型的特殊支持。 除非已保存模型(即具有主键),否则将they are comparing by identity(CPython:memory location)保存,即使每个字段都相同,对于两个单独的未保存模型实例,该值也总是不同的。 / p>

要基于内容比较未保存的模型实例,您需要手动检查所有相关字段中的数据是否相等。第三方testfixtures为此提供了一个帮助程序:请参见django_compare