Общий ответ «обернуть поле в property
(или другой дескриптор), то есть:
class MyModel(models.Model):
_lazy = models.WhateverField(
db_column="lazy",
blank=True,
null=True,
default=None
)
@property
def lazy(self):
if self._lazy is None:
self._lazy = get_the_value_from_api_call(...)
self.save(update_fields=["_lazy"])
return self._lazy
# if you want to be able to set the property - else
# ignore this part and `MyModel.lazy` will become
# read-only
@lazy.setter
def lazy(self, value):
self._lazy = value
НО я бы определенно НЕ позволил это сделать в моей команде - я не ожидаю, что получатель выполнит HTTP-запрос и обновит базу данных - и я настоятельно рекомендую вам найти лучший (надежный, надежный и предсказуемый) способ решения реальная проблема, связанная, в основном, с обработкой квоты API.