Сохранение возможно, но каждый раз, когда вы обращаетесь к пользователю [0], вы фактически получаете его из базы данных, поэтому он не изменяется.Действительно, когда вы нарезаете Queryset, Django отправляет запрос SELECT ... FROM ... OFFSET ... LIMIT ... в вашу базу данных.
Queryset - это не список, поэтому, если вы хотитеон должен вести себя как список, вам нужно оценить его, для этого вызвать list()
.
user = list(User.objects.filter(id=123))
Во втором примере вызов if user
фактически оценит набор запросов (получите егоиз базы данных в вашу программу на python), поэтому вы затем работаете с внутренним кэшем Queryset.
В качестве альтернативы, вы можете использовать u = user[0]
, отредактировать его и затем сохранить, что будет работать.
Наконец, вы должны на самом деле звонить Queryset.get
, а не filter
здесь, так как вы используете уникальный ключ.