Opened 10 months ago
Closed 10 months ago
#35110 closed New feature (wontfix)
in_bulk does not work with annotated fields, nor on foreign key
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 )
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 (2)
comment:1 by , 10 months ago
Description: | modified (diff) |
---|
comment:2 by , 10 months ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
Type: | Bug → New feature |
Version: | 5.0 → dev |
Note:
See TracTickets
for help on using tickets.
Hello Cody, thank you for your ticket. This seems to be a new feature request since the documentation says that
in_bulk
works witha unique field or a distinct field
(I read this as model's own fields, not annotations nor related field's fields, since checking uniqueness there could get tricky/expensive).For cases like this, the recommended path forward is to first propose and discuss the idea/request with the community and gain consensus. To do that, you could start a new conversation on the Django Forum, where you'll reach a wider audience and likely get extra feedback.
I'll close the ticket for now, but if there is a community agreement for the feature request, you are welcome to come back to the ticket and point to the forum topic, so we can then re-open it. For more details, please see the documented guidelines for requesting features.
Thanks!