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

时间:2015-01-19 13:26:48

标签: python django testing assert

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

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

无论如何,我知道如何做到这一点,但我使用django 1.6并且Model._meta API还没有公开:

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

那么有更好的方法吗?

[编辑] python 2.7

1 个答案:

答案 0 :(得分:2)

您可以使用django.forms.models.model_to_dict方法,并将生成的词典与简单的dict1 == dict2进行比较。