擅长:python、mysql、java
<p>也许这不是最好的解决方案,但我认为它能完成任务。您可以检索将被更新的实例,然后使用filter()和lambda函数计算已更改的字段,正如Rahul Gupta在<a href="https://stackoverflow.com/a/31683045/13163563">this</a>answer中所建议的那样</p>
<p>假设您可以通过<a href="https://docs.djangoproject.com/en/3.0/ref/models/querysets/#update-or-create" rel="nofollow noreferrer">docs</a>中报告的first_name和last_name来识别实例:</p>
<pre><code>old_instance = Person.objects.filter(first_name=first_name, last_name=last_name)
old_instance = old_instance[0] if old_instance else None
new_instance, created = Person.objects.update_or_create(
first_name=first_name, last_name=last_name,
defaults={'first_name': 'Bob'},
)
# it's been updated and we have the old instance
if not created and old_instance:
# get a list of the model's fields
fields = Person._meta.get_all_field_names()
# compute the fields which have changed
diff_fields = filter(lambda field: getattr(old_instance,field,None)!=getattr(new_instance,field,None), fields)
</code></pre>
<p>此时的差异字段列表应仅包含<em>第一个\u名称</em></p>