#django
#джанго
Вопрос:
Ни за что на свете я не могу найти ответ на этот вопрос в Интернете, хотя он является основным.
У меня есть две модели, одна из которых ссылается на другую:
class A(models.Model):
name = models.CharField(...)
...
class B(models.Model):
a = models.ForeignKey(A)
Теперь я храню экземпляр B в памяти и очень часто обращаюсь b.a.name
к нему. b.a.name
Вызывает ли доступ к базе данных запрос каждый раз, так что изменения в a.name
(изменения, внесенные другим процессом) видны в моем процессе? Или я должен a
каждый раз запрашивать явно?
Ответ №1:
Я удивлен, что вы не смогли найти никакой информации по этому поводу. Довольно хорошо документировано, что прямые отношения кэшируются при первом использовании — происходит то, что создается атрибут кэша, и последующие запросы сначала проверят это.
Так что да, это означает, что изменения этого объекта в другом процессе не будут видны, и вам нужно будет каждый раз повторно запрашивать. (Обратите также внимание, что в зависимости от настройки изоляции транзакций вашей базы данных вы можете даже не увидеть новое значение при повторном запросе — возможно, вам потребуется сначала зафиксировать текущую транзакцию.)
Комментарии:
1. Я тоже удивлен, обычно я нахожу такие вещи. Спасибо, я сделаю соответствующий запрос.