我试图在我的一个测试中做出断言,即模型中的字段没有改变。我知道哲学上这是不正确的,但由于我控制了我需要知道的所有变量,我只想检查我的数据库条目是否没有改变。
我愿意接受一个解决方案,可以将其转换为一个断言,即某些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
答案 0 :(得分:2)
您可以使用django.forms.models.model_to_dict
方法,并将生成的词典与简单的dict1 == dict2
进行比较。