Commit 04e7c7d5 authored by Baptiste Mispelon's avatar Baptiste Mispelon
Browse files

[1.7.x] Fixed #23492 -- Restored F.__deepcopy__.

This reverts commit 3a660351.
A regression test was also added.

Backport of d63ac5b5 from master.
parent 68ab3b1a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -145,6 +145,11 @@ class F(ExpressionNode):
        super(F, self).__init__(None, None, False)
        self.name = name

    def __deepcopy__(self, memodict):
        obj = super(F, self).__deepcopy__(memodict)
        obj.name = self.name
        return obj

    def prepare(self, evaluator, query, allow_joins):
        return evaluator.prepare_leaf(self, query, allow_joins)

+10 −0
Original line number Diff line number Diff line
from __future__ import unicode_literals

from copy import deepcopy

from django.core.exceptions import FieldError
from django.db.models import F
from django.db import transaction
@@ -281,3 +283,11 @@ class ExpressionsTests(TestCase):
            company_ceo_set__num_employees=F('company_ceo_set__num_employees')
        )
        self.assertEqual(str(qs.query).count('JOIN'), 2)

    def test_F_object_deepcopy(self):
        """
        Make sure F objects can be deepcopied (#23492)
        """
        f = F("foo")
        g = deepcopy(f)
        self.assertEqual(f.name, g.name)