查找同一模型的两个实例之间的哪些字段不同

gab*_*n88 7 django django-models

好吧,我认为问题解释了.

我有两个Django模型的实例,我想知道哪些字段不同.

你怎么能以聪明的方式做到这一点?

干杯!

Rah*_*pta 7

让我们说,obj1并且obj2是模型的2个实例MyModel.

要知道Django模型的两个实例中哪些字段不同,我们首先获取模型的所有字段并将其存储在变量中my_model_fields.

my_model_fields = MyModel._meta.get_all_field_names() # gives me the list of all the model fields defined in it
Run Code Online (Sandbox Code Playgroud)

然后,我们应用filter()lambda知道哪些领域它们之间的不同.

filter(lambda field: getattr(obj1,field,None)!=getattr(obj2,field,None), my_model_fields)
Run Code Online (Sandbox Code Playgroud)

filter()函数将返回两个实例之间不同的模型字段列表.

  • 较新的 django 版本应在[此处](/sf/answers/217442011/)检查“get_all_field_names”的替代方案。 (2认同)