+1 on get_or_none. It seems to be a pattern that comes up quite a lot in user code, and I know I've had use for it lots of times. Cal, are you thinking of having a loose function get_or_none(qs, args, kwargs), or implementing it directly on the manager? I think it'd make sense to implement on the manager, but the name doesn't "fit" with the other methods available, so perhaps it'd be better to match it up with get_or_create as a simple shortcut.
Josh On Friday, 14 March 2014 04:48:16 UTC+11, Cal Leeming [Simplicity Media Ltd] wrote: > > Sorry yes, you're quite right. > > To be clear - the proposed solution in this thread is to make > `.get_or_none()` work exactly the same as `.get()`, with the only exception > that None is returned in place of DoesNotExist. All other logic (args, > kwargs, exceptions etc) stay exactly the same. > > Cal > > > On Thu, Mar 13, 2014 at 5:41 PM, Sean Bleier <[email protected]<javascript:> > > wrote: > >> I like the implementation referenced in the SO thread, but I would just >> point out that `.get_or_none()` should accept both *args and **kwargs. `Q` >> objects can be passed in as arguments to `.get()` and `.filter()`, so it's >> only natural to allow that for `.get_or_none()`. >> >> >> On Thu, Mar 13, 2014 at 10:26 AM, Cal Leeming [Simplicity Media Ltd] < >> [email protected] <javascript:>> wrote: >> >>> Just read through all those threads/tickets, here's my conclusion. >>> >>> #2659 was rejected 8 years ago [1] on the basis that it's a "feature >>> creep", and that it "doesn't offer anything revolutionary". However the >>> same could be said for .first() and .last(), yet those were accepted. >>> >>> #11352 was rejected by luke plant 2 years ago [4] based on the suggested >>> implementation in that ticket, which is not the same implementation as what >>> I'm proposing this time round. The design of `get_object_or_none` being >>> added into shortcuts is not a good approach, and was right to be rejected. >>> >>> #17546 was rejected 2 years ago [3] on the basis that #2659 and #11352 >>> were rejected, both of which I've addressed above. >>> >>> First argument - `first()` and `.last()` have been added, yet the >>> principle behind why they were added is the same as `.get_or_none()`. >>> Second argument - The implementation being suggested in this thread is >>> not the same as what has been suggested in the three rejected tickets. >>> Third argument - Thread [2] had mostly positive feedback, but there was >>> no BDFL decision specifically on `get_or_none`. >>> >>> If I'm missing something here, please let me know. >>> >>> Cal >>> >>> [1] https://code.djangoproject.com/ticket/2659 >>> [2] >>> https://groups.google.com/forum/?fromgroups=#!searchin/django-developers/get_default/django-developers/3RwDxWKPZ_A/mPtAlQ2b0DwJ >>> [3] https://code.djangoproject.com/ticket/17546 >>> [4] https://code.djangoproject.com/ticket/11352 >>> >>> >>> On Thu, Mar 13, 2014 at 5:05 PM, Shai Berger >>> <[email protected]<javascript:> >>> > wrote: >>> >>>> On Thursday 13 March 2014 18:45:31 Cal Leeming [Simplicity Media Ltd] >>>> wrote: >>>> > Seems this issue was brought up several years ago, though the thread >>>> was >>>> > later hijacked for other functionality and get_or_none fizzled out. >>>> > https://groups.google.com/forum/#!topic/django-developers/Saa5nbzqQ2Q >>>> > >>>> > In Django 1.6 there were convenience methods added for .first(), for >>>> the >>>> > same principle of not having to catch an IndexError (or in this case, >>>> a >>>> > DoesNotExist error); >>>> > >>>> https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.model >>>> > s.query.QuerySet.first >>>> > >>>> > This seems to be wanted by several users, as seen here; >>>> > >>>> http://stackoverflow.com/questions/1512059/django-get-an-object-form-the-db >>>> > -or-none-if-nothing-matches >>>> > >>>> > Seems to be quite an easy fix, just needs a proper patch. >>>> > >>>> > Any thoughts? >>>> > >>>> You linked the wrong thread. >>>> >>>> >>>> https://groups.google.com/forum/?fromgroups=#!searchin/django-developers/get_default/django-developers/3RwDxWKPZ_A/mPtAlQ2b0DwJ >>>> >>>> >>>> https://groups.google.com/forum/?fromgroups=#!searchin/django-developers/first%28%29/django-developers/iaOIvwzUhx4/x5wKtl7Bh2sJ >>>> >>>> I was (and still am) for a get_or_none() that raises an exception when >>>> it finds multiple objects, but we were overruled. >>>> >>>> Shai. >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Django developers" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected] <javascript:>. >>>> To post to this group, send email to >>>> [email protected]<javascript:> >>>> . >>>> Visit this group at http://groups.google.com/group/django-developers. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/django-developers/201403131905.09028.shai%40platonix.com >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Django developers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected] <javascript:>. >>> To post to this group, send email to >>> [email protected]<javascript:> >>> . >>> Visit this group at http://groups.google.com/group/django-developers. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/django-developers/CAHKQagFCyR2GGcY%2BV%2BGzdR%3DKi3P9%2BTVbT4BzVD_bDoJBN1w6Qw%40mail.gmail.com<https://groups.google.com/d/msgid/django-developers/CAHKQagFCyR2GGcY%2BV%2BGzdR%3DKi3P9%2BTVbT4BzVD_bDoJBN1w6Qw%40mail.gmail.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 developers" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to >> [email protected]<javascript:> >> . >> Visit this group at http://groups.google.com/group/django-developers. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-developers/CAKFtT_1UhAciOR-OSYW734ftsCRJ6%3DRTiKbhvNktUQVf%3DSHsQg%40mail.gmail.com<https://groups.google.com/d/msgid/django-developers/CAKFtT_1UhAciOR-OSYW734ftsCRJ6%3DRTiKbhvNktUQVf%3DSHsQg%40mail.gmail.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 developers" 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 http://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/05cbe701-87ec-4e2d-8b62-a5ba4eaf6e16%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
