On 12/18/06, Waylan Limberg <[EMAIL PROTECTED]> wrote:
>
> On 12/18/06, Gary Wilson <[EMAIL PROTECTED]> wrote:
> >
> > I often find myself writing code like:
> >
> > try:
> >     user = User.objects.get(pk=user_id)
> > except User.DoesNotExist:
> >     user = None
> >
> > What do you think about adding a get_or_none QuerySet method?
> >
> > def get_or_none(self, **kwargs):
> >     try:
> >         return self.get(**kwargs)
> >     except self.model.DoesNotExist:
> >         return None
> >
>
> Or how about using something similar to QuearyDict's get(key,
> default)? That way the fallback is not restricted to `None`. So
> something like this:
>
> user = User.objects.get(pk=user_id, default=None)
>
> Of course, I think that would probably be significantly more work than
> your little wrapper function.

note neccessarily (beware, quick&ugly proof of concept):
Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py   (revision 4227)
+++ django/db/models/query.py   (working copy)
@@ -12,6 +12,8 @@

 # The string constant used to separate query parts
 LOOKUP_SEPARATOR = '__'
+# for get(default)
+NOT_SET='WHATEVER'

 # The list of valid query types
 QUERY_TERMS = (
@@ -202,7 +204,8 @@
             cursor.execute("SELECT COUNT(*)" + sql, params)
         return cursor.fetchone()[0]

-    def get(self, *args, **kwargs):
+
+    def get(self, default=NOT_SET, *args, **kwargs):
         "Performs the SELECT and returns a single object matching the
given keyword arguments."
         clone = self.filter(*args, **kwargs)
         # clean up SQL by removing unneeded ORDER BY
@@ -210,6 +213,8 @@
             clone._order_by = ()
         obj_list = list(clone)
         if len(obj_list) < 1:
+            if default != NOT_SET:
+                return default
             raise self.model.DoesNotExist, "%s matching query does
not exist." % self.model._meta.object_name
         assert len(obj_list) == 1, "get() returned more than one %s
-- it returned %s! Lookup parameters were %s" %
(self.model._meta.object_name, len(obj_list), kwargs)
         return obj_list[0]




> --
> ----
> Waylan Limberg
> [EMAIL PROTECTED]
>
> >
>


-- 
Honza Král
E-Mail: [EMAIL PROTECTED]
ICQ#:   107471613
Phone:  +420 606 678585

--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to