Dear all,
This is probably a feature that has been proposed before, but I could
not find a discussion on it, so I proposed it on the tracker, and Tim
also couldn't find a discussion.
(ticket:
https://code.djangoproject.com/ticket/30118 )
I would like to propose being able to write
`SomeModel.objects.exists(field=value)` over
`SomeModel.objects.filter(field=value).exists()` (and similar for
`.count(**kwargs)`.
As Tim rightfully commented: "There should be one-- and preferably only
one --obvious way to do it.".
I'm proposing this is a case where the obvious way would eventually be
more in line with my suggestion instead of what we currently use.
Consider the following code example (from
https://github.com/django/django/blob/709a8b861de14204f0e13c9a0fbfd61c11b3565d/tests/auth_tests/test_management.py#L998):
Permission.objects.filter(
content_type__model=opts.model_name,
content_type__app_label=opts.app_label,
codename=codename,
).exists()
There is a weird (to me, your mileage might vary) ").exists()" as a
final line, and I would like to write this as
Permission.objects.exists(
content_type__model=opts.model_name,
content_type__app_label=opts.app_label,
codename=codename,
)
This pattern seems to be quite rare in the Django codebase itself, but
in the codebase at work we have several cases of `queryset.filter(<lots
of lines>).exists()` (and similar with count), and I am expecting this
to also be prevalent in other codebases out there.
Arguing against it however are the following lines of the Zen of Python:
- "Explicit is better than implicit."
- Maybe also "Special cases aren't special enough to break the rules.",
because `.filter().count()` and `.exclude().count()` are both the same
pattern, but this would only create an alternative for the first.
- "There should be one-- and preferably only one --obvious way to do it."
Beyond these short quips, I was hoping there might also be an earlier
discussion covering this.
Kind regards,
Sjoerd Job Postmus