Django serializer does unnecessary db queries
When django serializes object, to get the foreign key id referenced in object it queries the db instead of just using the id e.g.
class QBAccount(CompanyModel):
company = models.ForeignKey(Company)
>>> from deretoapp.models import QBAccount
>>> import logging
>>> l = logging.getLogger('django.db.backends')
>>> l.setLevel(logging.DEBUG)
>>> l.addHandler(logging.StreamHandler())
>>> a = QBAccount.allobjects.all()[0]
>>> from django.core import serializers
>>> serializers.serialize('python', [a])
(0.000) SELECT `deretoapp_company`.`id`, ... FROM `deretoapp_company` WHERE `deretoapp_company`.`id` = 45995613-adeb-488f-9556-d69e856abe5f ; args=(u'45995613-adeb-488f-9556-d69e856abe5f',)
[{'pk': u'3de881eb-8409-4089-8de8-6e24f7281f37', 'model': u'deretoapp.qbaccount', 'fields': {... 'company': u'45995613-adeb-488f-9556-d69e856abe5f' ....}}]
Here db query after serializers.serialize
is not needed because compay id could have been obtained directly by a.company_id
, and query itself shows id is being passed to db to get the id, it looks like problem is because a.company.id
is a db query which in ideal world also should not happen.
Change History
(5)
Component: |
Uncategorized → Core (Serialization)
|
Owner: |
changed from nobody to Grzegorz Nosek
|
Status: |
new → assigned
|
Has patch: |
set
|
Triage Stage: |
Unreviewed → Accepted
|
Triage Stage: |
Accepted → Ready for checkin
|
Resolution: |
→ fixed
|
Status: |
assigned → closed
|
In [17439]: