[Django] #34495: Queryset update fails when updating parent model field with default ordering on MySQL backend

2 views
Skip to first unread message

Django

unread,
Apr 14, 2023, 6:40:28 AM4/14/23
to django-...@googlegroups.com
#34495: Queryset update fails when updating parent model field with default
ordering on MySQL backend
-------------------------------------+-------------------------------------
Reporter: Karolis | Owner: nobody
Ryselis |
Type: Bug | Status: new
Component: Database | Version: 3.2
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 |
-------------------------------------+-------------------------------------
consider the following models:

{{{
class SupplyOrderGoodServiceBase(models.Model):
supplier_price = models.DecimalField(max_digits=12, decimal_places=4)

class Meta:
ordering = ('id',)

class SupplyOrderGood(SupplyOrderGoodServiceBase):
order_good = models.ForeignKey(to="sales.OrderGood",
on_delete=models.CASCADE)
}}}

Running the following query fails:

{{{
SupplyOrderGood.objects.filter(order_good_id=order_good.pk).update(supplier_price=supplier_price)
}}}

This happens because the `SupplyOrderGood` instances do not have to be
updated, the update is on `SupplyOrderGoodServiceBase`.
`SQLUpdateCompiler` generates no SQL for `SupplyOrderGood` (`as_sql`
returns `'', []`). However, MySQL's `SQLUpdateCompiler` finds
`self.query.order_by` to be not empty and adds `ORDER BY` to an empty SQL
query. Therefore, it tries to run SQL query ` ORDER BY
`sales_supplyordergood`.`supplyordergoodservicebase_ptr_id` ASC`, which,
of course, fails.

This can be worked around by added an `.order_by()` to the query.

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

Django

unread,
Apr 15, 2023, 1:42:18 PM4/15/23
to django-...@googlegroups.com
#34495: Queryset update fails when updating parent model field with default
ordering on MySQL backend
-------------------------------------+-------------------------------------
Reporter: Karolis Ryselis | Owner: nobody
Type: Bug | Status: closed
Component: Database layer | Version: 3.2
(models, ORM) | Resolution:
Severity: Normal | worksforme
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 Mariusz Felisiak):

* status: new => closed
* resolution: => worksforme


Comment:

Thanks for this ticket, however it works for me. Can you provide a sample
project that reproduces the issue? Can you reproduce it on Django 4.2?

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

Reply all
Reply to author
Forward
0 new messages