+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.

Reply via email to