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

Is there (already) a way to compare 2 model instances, field for field, to see if they are equal?

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

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

无论如何,我知道该怎么做,但我使用的是 django 1.6 并且 Model._meta API 还不是 public:

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 进行比较。