Explicit is better than implicit. So, I would stick with:
qs = MyModel.objects.filter(...)
if len(qs) == 0:
# no record found
elif len(qs) == 1:
# one record found
else:
# many records found
On 26 June 2017 at 07:32, Tzu-ping Chung <[email protected]> wrote:
> Hi all,
>
> I’m wondering what is the best way to handle the logic “if there’s only
> one entry in the QuerySet, do things with that entry”. What I do currently
> is
>
> qs = MyModel.objects.filter(...)
> try:
> obj = qs.get()
> except (MyModel.DoesNotExist, MyModel.MultipleObjectsReturned):
> for obj in qs: # Something like this
> print(obj)
> else:
> do_something(obj)
>
> This works pretty well, but slightly annoys me because .get() clones and
> performs an extra fetch on the QuerySet. I guess I have two questions:
>
> 1. Why does .get() need to perform the extra clone even when there are
> no arguments? This seems unnecessary to me.
> 2. Is there a better way to do what I want to do?
>
> Thanks in advance.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/django-users/c67f9206-4b22-45f7-b7e6-1af82d2d94bb%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/c67f9206-4b22-45f7-b7e6-1af82d2d94bb%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CAFmXjSA0%2B6eRHnDQ9JJQ09%2Br3chtzzcZTn-L4BLQDU1uV0kcoA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.