Моя установка выглядит примерно так:
# account/models.py
Account(models.Model):
""" The user profile """
user = models.OneToOneField("auth.User", primary_key=True, related_name="account")
balance = models.DecimalField(max_digits=32, decimal_places=2, default=0)
activation_key = models.CharField(max_length=32)
...
И у меня есть обработчик сигнала, который выглядит следующим образом:
def recalculate_credit(sender, instance=None, created=None, **kwargs):
print(instance.user.account.activation_key)
account = instance.user.get_profile()
print(account.activation_key)
account.calculate_balance()
account.save()
Я добавил операторы печати, чтобы подчеркнуть проблему. Во время процесса регистрации я установил свойство activation_key
, сохранить, а затем этот сигнал срабатывает позже. Первый оператор print возвращает этот ключ активации, второй возвращает ''
.
Как это возможно? Я что-то упускаю из-за того, как работает .get_profile()
? Приведенный выше код фактически удаляет значение activation_key
из учетной записи пользователя. Происходит ли ленивая загрузка или кеширование объектов, о которых я не знаю?