#21144 closed Cleanup/optimization (fixed)
Not possible to update foreign key by id for a queryset
Reported by: | Owned by: | vaskalas | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.5 |
Severity: | Normal | Keywords: | update, related model, performance |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Attempting to minimize queries when updating list of ModelA instances that have foreign keys to ModelB, and I know the ids of the new ModelB instances I want to use for the instances of ModelA (that I only have the id for, not the instance).
Trying:
ModelA.objects.filter(pk=id_of_a_instance).update(b_id=id_of_b_instance) which yields 'FieldNameDoesNotExist' because 'get_field_by_name' only has 'b' as a field name for ModelA, not b_id (which is strange given that is what is actually stored).
Then I try:
ModelA.objects.filter(pk=id_of_a_instance).update(b=id_of_b_instance), which says it needs an instance of ModelB, not a number.
Which means I will be stuck with an extra query:
model_b_list = list(ModelB.objects.filter(id_in=[list of ids for a instances])
and then have to iterate through the ModelA instances and assign the actual ModelB instances
Change History (7)
comment:1 by , 11 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
comment:2 by , 10 years ago
Sorry but what happened to this bug? Is this fixed in a later version? Because I can still see this in 1.5.
comment:3 by , 10 years ago
Could I ask for additional clarifications regarding why this issue was closed and set to invalid? This seems like a legitimate use case to support, no?
comment:4 by , 10 years ago
Resolution: | invalid |
---|---|
Status: | closed → new |
Triage Stage: | Unreviewed → Accepted |
Looks like the original reporter closed it without much explanation. I'm reopening, because I agree this is a valid case and should be supported somehow (I think probably by accepting raw IDs for an FK field in update
).
comment:5 by , 10 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:6 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Issue was fixed in commit c21e86ab9e3e5ebd6d245d038cb0cb352cd84c3a. Added unit tests to verify fix in https://github.com/django/django/pull/4499
comment:7 by , 10 years ago
The unit test was added actually added in this commit, https://github.com/django/django/commit/e01b5a5823fa06a63382f87472978a16c77048d2
My mistake--this should not have been submitted, was still debugging and this is not an issue.