#35587: Add QuerySet.partition(*args, **kwargs) -------------------------------------+------------------------------------- Reporter: Micah Cantor | Owner: (none) Type: New feature | Status: closed Component: Database layer | Version: 5.0 (models, ORM) | Severity: Normal | Resolution: wontfix Keywords: | Triage Stage: | Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Changes (by Simon Charette):
* resolution: => wontfix * status: new => closed Comment: I don't think it's worth extending the `Queryset` API with a method that can be emulated through various method and would entertain the idea that the returned set of objects will always be mutually exclusive. This is not a guarantee that the ORM can provide for a few reasons. First the querysets are going to reach to the database serially and thus they won't be executed against the same ''snapshot'' so an object could be changed in a way that makes it appear in both partitions. Secondly, while the ORM goes at great length to make `exclude` the complement of `filter` [https://code.djangoproject.com/query?description=~exclude&status=assigned&status=new&order=id&desc=1 it has a few know bugs] which could also manifest themselves in these scenarios. You are likely better off with a single query that uses an annotation as the Python-level predicate for partitioning {{{#!python def partition(self, *args, **kwargs): queryset = self.annotate(_partition_predicate=Q(*args, **kwargs)) predicate = attrgetter("_partition_predicate") return filter(predicate, queryset), filterfalse(predicate, queryset) }}} But that doesn't allow chaining which for the aforementioned reasons I believe is not achievable. -- Ticket URL: <https://code.djangoproject.com/ticket/35587#comment:1> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/010701909959e2e6-77a20b11-4081-4f70-a658-f9f2d86289e8-000000%40eu-central-1.amazonses.com.