Подумайте, что происходит в вашем коде.
Если в ваших данных есть dob
, вы звоните request.user.profile
. Это вызывает вашу собственность, которая делает запрос к базе данных и получает или создает экземпляр профиля.
Далее вы снова звоните request.user.profile
. Угадай, что это делает? Делает новый вызов в базу данных и снова получает экземпляр профиля. Но, конечно, это новый экземпляр, хотя он ссылается на ту же строку базы данных, поэтому он не будет иметь значения для dob
, которое вы только что установили в последней версии.
Теперь потенциально вы можете решить эту проблему, сохранив профиль в локальной переменной:
profile = request.user.profile
profile.dob = data['dob']
profile.save()
Но, если честно, я бы отбросил весь взлом со свойством профиля. Это вызовет у вас много проблем.