Fixed #29066 -- Allowed negating query expressions.

This commit is contained in:
priyanshsaxena 2018-01-28 15:57:15 +05:30 committed by Tim Graham
parent 6b2f8fb91c
commit 617d5f410f
5 changed files with 17 additions and 3 deletions

View File

@ -662,6 +662,7 @@ answer newbie questions, and generally made Django that much better:
pradeep.gowda@gmail.com pradeep.gowda@gmail.com
Preston Holmes <preston@ptone.com> Preston Holmes <preston@ptone.com>
Preston Timmons <prestontimmons@gmail.com> Preston Timmons <prestontimmons@gmail.com>
Priyansh Saxena <askpriyansh@gmail.com>
Rachel Tobin <rmtobin@me.com> Rachel Tobin <rmtobin@me.com>
Rachel Willmer <http://www.willmer.com/kb/> Rachel Willmer <http://www.willmer.com/kb/>
Radek Švarz <http://www.svarz.cz/translate/> Radek Švarz <http://www.svarz.cz/translate/>

View File

@ -65,6 +65,9 @@ class Combinable:
# OPERATORS # # OPERATORS #
############# #############
def __neg__(self):
return self._combine(-1, self.MUL, False)
def __add__(self, other): def __add__(self, other):
return self._combine(other, self.ADD, False) return self._combine(other, self.ADD, False)

View File

@ -13,9 +13,13 @@ more complex computations.
Supported arithmetic Supported arithmetic
==================== ====================
Django supports addition, subtraction, multiplication, division, modulo Django supports negation, addition, subtraction, multiplication, division,
arithmetic, and the power operator on query expressions, using Python constants, modulo arithmetic, and the power operator on query expressions, using Python
variables, and even other expressions. constants, variables, and even other expressions.
.. versionchanged:: 2.1
Support for negation was added.
Some examples Some examples
============= =============

View File

@ -178,6 +178,8 @@ Models
:class:`~django.db.models.DateField` and :class:`~django.db.models.DateField` and
:class:`~django.db.models.DateTimeField` to the Monday of a week. :class:`~django.db.models.DateTimeField` to the Monday of a week.
* Query expressions can now be negated using a minus sign.
Requests and Responses Requests and Responses
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~

View File

@ -1425,6 +1425,10 @@ class ReprTests(TestCase):
class CombinableTests(SimpleTestCase): class CombinableTests(SimpleTestCase):
bitwise_msg = 'Use .bitand() and .bitor() for bitwise logical operations.' bitwise_msg = 'Use .bitand() and .bitor() for bitwise logical operations.'
def test_negation(self):
c = Combinable()
self.assertEqual(-c, c * -1)
def test_and(self): def test_and(self):
with self.assertRaisesMessage(NotImplementedError, self.bitwise_msg): with self.assertRaisesMessage(NotImplementedError, self.bitwise_msg):
Combinable() & Combinable() Combinable() & Combinable()