Opened 17 months ago

Last modified 4 weeks ago

#21144 new Cleanup/optimization

Not possible to update foreign key by id for a queryset

Reported by: dakinsloss@… Owned by: nobody
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 (4)

comment:1 Changed 17 months ago by dakinsloss@…

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to invalid
  • Status changed from new to closed

My mistake--this should not have been submitted, was still debugging and this is not an issue.

comment:2 Changed 9 months ago by mbhagya@…

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 Changed 4 weeks ago by Microserf

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 Changed 4 weeks ago by carljm

  • Resolution invalid deleted
  • Status changed from closed to new
  • Triage Stage changed from Unreviewed to 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).

Note: See TracTickets for help on using tickets.
Back to Top