Python 是否(已经)有方法比较两个模型实例,一个字段一个字段,看看它们是否相等?

Python 是否(已经)有方法比较两个模型实例,一个字段一个字段,看看它们是否相等?,python,django,testing,assert,Python,Django,Testing,Assert,我试图在我的一个测试中断言模型中的字段没有改变。我知道理论上这是不正确的,但是由于我控制了所有我需要知道的变量,我只想检查我的DB条目是否没有改变 我愿意接受一个解决方案,将其转换为一个断言,即没有调用某些API,这应该是为了更新模型,但我知道API可能没有完整的文档记录,所以我更希望有一种方法可以检查所有字段值是否相等 无论如何,我知道如何做到这一点,但我正在使用django 1.6和该模型 def assertFieldsEqual(self, instance1, instance2)

我试图在我的一个测试中断言模型中的字段没有改变。我知道理论上这是不正确的,但是由于我控制了所有我需要知道的变量,我只想检查我的DB条目是否没有改变

我愿意接受一个解决方案,将其转换为一个断言,即没有调用某些API,这应该是为了更新模型,但我知道API可能没有完整的文档记录,所以我更希望有一种方法可以检查所有字段值是否相等

无论如何,我知道如何做到这一点,但我正在使用django 1.6和该模型

def assertFieldsEqual(self, instance1, instance2)
    for field_name in MyModel._meta.get_all_field_names():
        val1 = getattr(instance1, field_name)
        if not isinstance(val1, django.db.models.Field):
            continue  # this excludes managers
        if val1 != getattr(instance2, field_name):
            return False  # or raise assertion error, or whatever
    return True  # or don't do nothing, or whatever
那么有更好的方法吗

[编辑]
Python2.7

您可以使用
django.forms.models.model_to_dict
方法,并将结果字典与简单的
dict1==dict2
进行比较

您使用的是哪个python版本?(2.x或3.x)已更新。我使用的是djpython 2.7虽然您的解决方案非常棒,并回答了我的问题,但如果我想知道哪些字段不同,您的解决方案将需要额外的代码,而在我提供的代码中,这只是另一个print StateMet或smth quick。无论如何,谢谢!没错,不过这基本上是因为这个解决方案一开始就不那么冗长。一个简单的
[name for name in dict1.keys(),如果dict1[name]!=dict2[name]]
将为您提供所有不同的键,因为它们是字段名。