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
Preston Holmes <preston@ptone.com>
Preston Timmons <prestontimmons@gmail.com>
Priyansh Saxena <askpriyansh@gmail.com>
Rachel Tobin <rmtobin@me.com>
Rachel Willmer <http://www.willmer.com/kb/>
Radek Švarz <http://www.svarz.cz/translate/>

View File

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

View File

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

View File

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

View File

@ -1425,6 +1425,10 @@ class ReprTests(TestCase):
class CombinableTests(SimpleTestCase):
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):
with self.assertRaisesMessage(NotImplementedError, self.bitwise_msg):
Combinable() & Combinable()