Qu'est-ce qui se passe ici est que Score.objects.filter() ne retourne pas une liste régulière, mais un QuerySet. QuerySets se comportent comme des listes, à certains égards, mais chaque fois que vous coupez un vous obtenez une nouvelle instance QuerySet, et chaque fois que vous index en un seul, vous obtenez une nouvelle instance de votre classe de modèle.
Cela signifie que votre code d'origine fait quelque chose comme:
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
Si pour une raison quelconque vous avez besoin de faire cela sur un QuerySet plutôt que d'utiliser simplement get(), vous pouvez écrire:
thechan = Score.objects.filter(content=44)[0]
thechan.custom_score = 2
thechan.save()
à la place. Cette distinction devient un peu plus important si vous êtes, par exemple, itérer sur les éléments d'un QuerySet au lieu de traiter avec un seul enregistrement.
Euh ... quoi? Comment fonctionne ce code? – harto
2 avertissements: Django soulèvera pour vous: « MultipleObjectsReturned: get() est revenu plus d'un titre » et, si plus de 1 « contenu », soulèvera Object.DoesNotExist si aucun résultat. – panchicore