Skip to content

Commit 7407e42

Browse files
committed
Fix renaming annotations in Django 2.0
1 parent e9b5e08 commit 7407e42

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

psqlextra/query.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import django
2+
13
from enum import Enum
24
from typing import List, Tuple, Optional, Dict, Any
35
from collections import OrderedDict
@@ -43,8 +45,10 @@ def rename_annotations(self, annotations) -> None:
4345

4446
self._annotations = OrderedDict(
4547
[(new_name, v) if k == old_name else (k, v) for k, v in self._annotations.items()])
46-
self.set_annotation_mask(
47-
(new_name if v == old_name else v for v in (self.annotation_select_mask or [])))
48+
49+
if django.VERSION < (2, 0):
50+
self.set_annotation_mask(
51+
(new_name if v == old_name else v for v in self.annotation_select_mask))
4852

4953
def add_join_conditions(self, conditions: Dict[str, Any]) -> None:
5054
"""Adds an extra condition to an existing JOIN.

tests/test_query.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from psqlextra.fields import HStoreField
44
from psqlextra.expressions import HStoreRef
55

6+
from django.db.models import F
7+
68
from .fake_model import get_fake_model
79

810

@@ -33,6 +35,20 @@ def test_annotate_hstore_key_ref():
3335
assert queryset['english_title'] == 'english'
3436

3537

38+
def test_annotate_rename():
39+
"""Tests whether field names can be overwritten
40+
with a annotated field."""
41+
42+
model = get_fake_model({
43+
'title': models.CharField(max_length=12),
44+
})
45+
46+
model.objects.create(title='swen')
47+
48+
obj = model.objects.annotate(title=F('title')).first()
49+
assert obj.title == 'swen'
50+
51+
3652
def test_hstore_f_ref():
3753
"""Tests whether F(..) expressions can be used in
3854
hstore values when performing update queries."""

0 commit comments

Comments
 (0)