﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
14029	not operator on F objects silently fails	Ramiro Morales	Marcos Moyano	"[On behalf of Matías Bellone aka toote that got his submission rejected as SPAM]

Trying to make a toggle action in the admin on a !BooleanField lead me to very simple and straightforward code inside the !ModelAdmin subclass. Problem is that it didn't work and no error was presented whatsoever. Even worse, the update actually executes something that modifies the queryset but I haven't found a way to identify how to get the query executed.

The model can be just as simple as:
 

{{{
from django.db.models import Model, BooleanField
 
class TestModel(Model):
    field1 = BooleanField()
}}}

Testing the ""action"" in an interactive shell has the same results:
 
{{{
$ ./manage.py shell
Python 2.6.5+ (release26-maint, Jul  6 2010, 12:58:20)
[GCC 4.4.4] on linux2
Type ""help"", ""copyright"", ""credits"" or ""license"" for more information.
(InteractiveConsole)
>>> from models import TestModel
>>> a = TestModel.objects.all()
>>> for instance in a:
...     print instance.field1
...
True
True
>>> from django.db.models import F
>>> a = TestModel.objects.all()
>>> # to return to having a non-executed queryset
>>> a.update(field1=not F('field1'))
2
>>> a = TestModel.objects.all()
>>> for instance in a:
...     print instance.field1
...
True
True
}}}
 
Further tests with the debug_toolbar shows that no matter what the original values of field1 is the update will set it to true (tested on querysets with 1 and 2 instances with all possible combinations of field1 values). 
"	Bug	closed	Database layer (models, ORM)	1.2	Normal	duplicate		Mike Hurt	Accepted	0	0	0	0	0	0
