Может быть, это не лучшее решение, но я думаю, что оно выполняет свою работу. Вы можете получить экземпляр, который будет обновлен, а затем вычислить поля, которые изменились, используя filter () и лямбда-функции, как это предлагается в этом ответе Рахула Гупты.
Предположим, вы можете идентифицируйте экземпляр, скажем, first_name и last_name, как указано в docs :
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)
Список diff_fields на этом этапе должен содержать только first_name .