Почему я не могу сохранить объект в Django? - PullRequest
1 голос
/ 07 октября 2009
thechan = Score.objects.filter(content=44)[0:1]
thechan[0].custom_score = 2
thechan[0].save()

Я делаю выписки, и все хорошо. Тем не менее, это не экономия!

Я захожу в свою базу данных и запускаю простую инструкцию SELECT .. и она не изменяется!

select custom_score FROM music_score where content_id = 44;

Ответы [ 2 ]

12 голосов
/ 07 октября 2009

Здесь происходит то, что Score.objects.filter () не возвращает обычный список, а QuerySet . QuerySets ведут себя как списки в некоторых отношениях, но каждый раз, когда вы разрезаете один, вы получаете новый экземпляр QuerySet, и каждый раз, когда вы индексируете в один, вы получаете новый экземпляр вашего класса модели.

Это означает, что ваш оригинальный код выполняет что-то вроде:

thechan = Score.objects.filter(content=44)[0:1]
thechan[0].custom_score = 2

thechan = Score.objects.filter(content=44)[0:1]
thechan[0].save() # saves an unmodified object back to the DB, no effective change

Если по какой-либо причине вам нужно было сделать это на QuerySet, а не просто с помощью get (), вы можете написать:

thechan = Score.objects.filter(content=44)[0]
thechan.custom_score = 2
thechan.save()

вместо этого. Это различие становится немного более важным, если, скажем, вы перебираете элементы QuerySet вместо того, чтобы работать с одной записью.

0 голосов
/ 07 октября 2009

Исправлено.

thechan = Score.objects.get(content=44)
thechan.custom_score = 2
thechan.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...