[Django] #28328: QuerySet.only doesn't work with QuerySet.difference

11 views
Skip to first unread message

Django

unread,
Jun 20, 2017, 11:11:17 AM6/20/17
to django-...@googlegroups.com
#28328: QuerySet.only doesn't work with QuerySet.difference
-------------------------------------+-------------------------------------
Reporter: Dmitry | Owner: nobody
Dygalo |
Type: | Status: new
Uncategorized |
Component: Database | Version: 1.11
layer (models, ORM) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
**models.py**:


{{{
class Model(models.Model):
description = models.CharField(max_length=255)
}}}

**Actual behavior**:

{{{
>>> to_remove = Model.objects.filter(description='TO_REMOVE')
>>> query_set = Model.objects.all().difference(to_remove).only('pk')
>>> print(query_set.query)
(SELECT "test_model"."id", "test_model"."description" FROM "test_model")
EXCEPT (SELECT "test_model"."id", "test_model"."description" FROM
"test_model" WHERE "test_model"."description" = TO_REMOVE)
}}}

**Expected**:

{{{
>>> to_remove = Model.objects.filter(description='TO_REMOVE')
>>> query_set = Model.objects.all().difference(to_remove).only('pk')
>>> print(query_set.query)
(SELECT "test_model"."id" FROM "test_model") EXCEPT (SELECT
"test_model"."id", "test_model"."description" FROM "test_model" WHERE
"test_model"."description" = TO_REMOVE)
}}}

**The problem**:
Even if I use `.only('pk')` there is still "description" column in SELECT
in the query, but I expect only "id" field as was specified in `only`.

--
Ticket URL: <https://code.djangoproject.com/ticket/28328>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Jun 20, 2017, 12:24:42 PM6/20/17
to django-...@googlegroups.com
#28328: QuerySet.only doesn't work with QuerySet.difference
-------------------------------------+-------------------------------------
Reporter: Dmitry Dygalo | Owner: nobody
Type: Bug | Status: closed
Component: Database layer | Version: 1.11
(models, ORM) |
Severity: Normal | Resolution: invalid
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Tim Graham):

* status: new => closed
* type: Uncategorized => Bug
* resolution: => invalid


Comment:

I believe it's unsupported but doesn't raise an error yet. As
[https://docs.djangoproject.com/en/dev/ref/models/querysets/#union per the
documentation], "only LIMIT, OFFSET, and ORDER BY (i.e. slicing and
order_by()) are allowed on the resulting QuerySet." See #27995 for a
ticket to raise a helpful message about this.

--
Ticket URL: <https://code.djangoproject.com/ticket/28328#comment:1>

Reply all
Reply to author
Forward
0 new messages