i think better to reuse Django functionality as much as possible, and django has 99% similar func get_object_or_404 which just raises Http404
from django.shortcuts import get_object_or_404
def get_or_none(model_or_qs, **kwargs):
    try:
        return get_object_or_404(model_or_qs, **kwargs)
    except Http404:
        return None
Some tests cases that shows that code can be used for Model, Queryset, RelatedManager
[in tests one User can Have multiple Contacts]
    @test_for(get_or_none)
    def test_get_or_none_for_model(self):
        self.assertEqual(self.user, get_or_none(User, pk=self.user.pk))
        self.assertEqual(None, get_or_none(User, pk=777))
    @test_for(get_or_none)
    def test_get_or_none_for_queryset_and_manager(self):
        contact = ContactFactory(user=self.user)
        self.assertEqual(self.user, get_or_none(User.objects, pk=self.user.pk))
        self.assertEqual(self.user, get_or_none(User.objects.all(), pk=self.user.pk))
        self.assertEqual(contact, get_or_none(Contact.objects.filter(user=self.user)))
        self.assertEqual(contact, get_or_none(self.user.contacts))
        self.assertEqual(None, get_or_none(User.objects.all(), pk=777))
        self.assertEqual(None, get_or_none(self.user.contacts, pk=777))