Opened 10 months ago

Last modified 10 months ago

#35110 closed New feature

in_bulk does not work with annotated fields, nor on foreign key — at Version 1

Reported by: Cody Towstik Owned by: nobody
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Cody Towstik)

in_bulk does some checks about the fields on the model using the class _meta.
It does not consider that fields can be annotated, or exist on another related model.

However, the code that does all the processing seems like it could handle both cases.

In both cases, you can make the field distinct.

class Person(models.Model):
    email = models.CharField()

class Customer(models.Model):
    person = models.ForeignKey("Person")

emails_to_process = [ "a", "b", "c" ]

# annotate case
Customer.objects.annotate(
    email_lower=Lower("person__email")
).distinct(
    "email_lower"
).in_bulk(
    emails_to_process, fieldname="email_lower"
)

# foreign key case
Customer.objects.distinct("person__email").in_bulk(emails_to_process, fieldname="person__email)

Change History (1)

comment:1 by Cody Towstik, 10 months ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top