We shouldn't bloat the API. Obviously there are nice looking approaches and not to mention the different behaviour in some of them. -1 on this proposal from me.
On Tuesday, July 3, 2012 8:22:59 AM UTC+3, Łukasz Rekucki wrote: > > On 3 July 2012 06:27, Maxime Haineault <[email protected]> wrote: > > One of the common pitfall I come across way to often with novices is > > something like this: > > > > def getFirstUser(): > > return User.objects.all()[0] > > > > It looks innocuous and often wont raise any exceptions in dev because > you > > develop and test with data, > > so they slip easily in production. > > > > def getFirstUser(): > > return User.objects.all().first() > > > > If the QuerySet is empty it should just return None instead of raising > an > > exception. > > > > Other methods like .last() could probably also be useful, but getting > the > > first element of a QuerySet > > is the pitfall I see the most often. > > > > Surprise Poney Quizz: which is the fastest way to get the first object > of a > > QuerySet ? > > > > A) Using count: > > > > qs = User.objects.all() > > if qs.count() > 0: > > return qs[0] > > else: > > return None > > > > B) Convert to list: > > > > r = list(qs[:1]) > > if r: > > return r[0] > > return None > > > > > > C) Using len: > > > > qs = User.objects.all() > > if len(qs) > 0: > > return qs[0] > > else: > > return None > > > > D) Try/except: > > > > qs = User.objects.all() > > try: > > return qs[0] > > except IndexError: > > return None > > > > E) Use __bool__ which fetches only one batch (depends on DB): > > qs = User.objects.all() > user = None if not qs else qs[0] > > F) Use the iterator protocol > > user = next(iter(User.objects.all()), None) # you can add LIMIT or > not, see Alex's comment > > -- > Łukasz Rekucki > -- You received this message because you are subscribed to the Google Groups "Django developers" group. To view this discussion on the web visit https://groups.google.com/d/msg/django-developers/-/o654lFsPYyEJ. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.
