=== modified file 'django/db/models/manager.py'
--- django/db/models/manager.py	2006-12-19 04:35:09 +0000
+++ django/db/models/manager.py	2006-12-22 06:44:11 +0000
@@ -68,7 +68,10 @@
 
     def get_or_create(self, **kwargs):
         return self.get_query_set().get_or_create(**kwargs)
-        
+
+    def update_or_create(self, **kwargs):
+        return self.get_query_set().update_or_create(**kwargs)
+
     def create(self, **kwargs):
         return self.get_query_set().create(**kwargs)
 

=== modified file 'django/db/models/query.py'
--- django/db/models/query.py	2006-12-19 04:35:09 +0000
+++ django/db/models/query.py	2006-12-22 06:50:35 +0000
@@ -240,6 +240,19 @@
             obj.save()
             return obj, True
 
+    def update_or_create(self, **kwargs):
+        """
+        Looks up an object with the given kwargs, creating one if necessary.
+        If the object already exists, then its fields are updated with the
+        values passed in the defaults dictionary.
+        Returns a tuple of (object, created), where created is a boolean
+        specifying whether an object was created.
+        """
+        obj, created = self.get_or_create(**kwargs)
+        if not created:
+            obj.update(**kwargs.pop('defaults', {}))
+        return obj, created
+
     def latest(self, field_name=None):
         """
         Returns the latest object, according to the model's 'get_latest_by'

