2010-07-22 8 views
4

J'essaie de modifier la valeur d'un objet BooleanField dans l'un de mes modèles, mais Django ne me le permet pas. Voici le code correspondant:Problème étrange lors de la tentative de définition d'une valeur BooleanField dans un modèle django

query = MyModel.objects.filter(name='example').filter(boolField=False) 
print query[0].boolField 
query[0].boolField = True 
query[0].save() 
print query[0].boolField 

Ce surprenant imprime:

False 
False 

Toute idée pourquoi le = True ne colle pas? Merci d'avance!

Edit: Ce qu'il fixe:

query = MyModel.objects.get(name='example', boolField=False) 
query.boolField = True 
query.save() 

Il semble que vous ne pouvez pas modifier les champs dans une requête que vous avez filtré par?

+0

Une raison pour laquelle vous voulez le faire de cette façon? Si vous récupérez un objet, pourquoi ne pas utiliser 'MyModel.objects.get'? –

+2

Je l'ai changé en '.get' et cela semble l'avoir réparé .. Une idée pourquoi? Est-il impossible de changer les champs que vous avez filtrés? – hora

Répondre

7

Ce n'est pas le filtrage qui est le problème, c'est le découpage. Chaque fois que vous découpez une queryset, Django vous donne un objet différent:

f = MyModel.objects.all()[0] 
f.id  # 1 
id(f)  # 4326035152 
ff = MyModel.objects.all()[0] 
ff.id  # 1 
id(ff)  # 4326035344 

Ici f et ff se réfèrent à la même ligne de base de données sous-jacente, mais différentes instances d'objets réels. Donc, dans votre exemple, l'instance sur laquelle vous avez défini le booléen n'est pas la même que celle que vous avez essayé d'enregistrer.

+0

Ah, merci. Cela a beaucoup plus de sens. – hora

Questions connexes