Index: xml_serializer.py
===================================================================
--- xml_serializer.py	(revision 3896)
+++ xml_serializer.py	(working copy)
@@ -5,6 +5,7 @@
 from django.conf import settings
 from django.core.serializers import base
 from django.db import models
+from django.db.models.fields.related import OneToOneRel
 from django.utils.xmlutils import SimplerXMLGenerator
 from xml.dom import pulldom
 
@@ -88,6 +89,17 @@
             self.xml.addQuickElement("object", attrs={"pk" : str(relobj._get_pk_val())})
         self.xml.endElement("field")
         
+    def handle_o2m_field(self, obj, field):
+        if not isinstance(field.field.rel, OneToOneRel):
+            self.xml.startElement("field", {
+                "name" : field.get_accessor_name(),
+                "rel"  : field.field.rel.__class__.__name__,
+                "to"   : field.field.name,
+            })
+            for relobj in getattr(obj, field.get_accessor_name()).iterator():
+                self.xml.addQuickElement("object", attrs={"pk" : str(relobj._get_pk_val())})
+            self.xml.endElement("field")
+    
     def _start_relational_field(self, field):
         """
         Helper to output the <field> element for relational fields
@@ -214,4 +226,4 @@
             inner_text.extend(getInnerText(child))
         else:
            pass
-    return "".join(inner_text)
\ No newline at end of file
+    return "".join(inner_text)
Index: base.py
===================================================================
--- base.py	(revision 3896)
+++ base.py	(working copy)
@@ -29,6 +29,10 @@
 
         self.stream = options.get("stream", StringIO())
 
+        self.export_o2m = options.get("export_o2m", False)
+        if self.options.has_key("export_o2m"):
+            del self.options["export_o2m"]
+
         self.start_serialization()
         for obj in queryset:
             self.start_object(obj)
@@ -41,6 +45,9 @@
                     self.handle_fk_field(obj, field)
             for field in obj._meta.many_to_many:
                 self.handle_m2m_field(obj, field)
+            if self.export_o2m:
+                for field in obj._meta.get_all_related_objects():
+                    self.handle_o2m_field(obj, field)
             self.end_object(obj)
         self.end_serialization()
         return self.getvalue()
@@ -103,6 +110,12 @@
         """
         raise NotImplementedError
 
+    def handle_o2m_field(self, obj, field):
+        """
+        Called to handle a OneToManyField.
+        """
+        raise NotImplementedError
+
     def getvalue(self):
         """
         Return the fully serialized queryset.
Index: python.py
===================================================================
--- python.py	(revision 3896)
+++ python.py	(working copy)
@@ -7,6 +7,7 @@
 from django.conf import settings
 from django.core.serializers import base
 from django.db import models
+from django.db.models.fields.related import OneToOneRel
 
 class Serializer(base.Serializer):
     """
@@ -43,6 +44,10 @@
     def handle_m2m_field(self, obj, field):
         self._current[field.name] = [related._get_pk_val() for related in getattr(obj, field.name).iterator()]
     
+    def handle_o2m_field(self, obj, field):
+        if not isinstance(field.field.rel, OneToOneRel):
+            self._current[field.get_accessor_name()] = [related._get_pk_val() for related in getattr(obj, field.get_accessor_name()).iterator()]
+    
     def getvalue(self):
         return self.objects
 
