Changeset 5409
- Timestamp:
- 06/01/07 08:39:08 (1 year ago)
- Files:
-
- django/trunk/django/core/serializers/json.py (modified) (1 diff)
- django/trunk/django/core/serializers/pyyaml.py (modified) (1 diff)
- django/trunk/docs/serialization.txt (modified) (2 diffs)
- django/trunk/tests/modeltests/serializers/models.py (modified) (1 diff)
- django/trunk/tests/regressiontests/serializers_regress/models.py (modified) (1 diff)
- django/trunk/tests/regressiontests/serializers_regress/tests.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/core/serializers/json.py
r5311 r5409 22 22 """ 23 23 def end_serialization(self): 24 self.options.pop('stream', None) 25 self.options.pop('fields', None) 24 26 simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options) 25 27 django/trunk/django/core/serializers/pyyaml.py
r4734 r5409 19 19 """ 20 20 def end_serialization(self): 21 self.options.pop('stream', None) 22 self.options.pop('fields', None) 21 23 yaml.dump(self.objects, self.stream, **self.options) 22 24 django/trunk/docs/serialization.txt
r5165 r5409 44 44 45 45 .. _HTTPResponse: ../request_response/#httpresponse-objects 46 47 Subset of fields 48 ~~~~~~~~~~~~~~~~ 49 50 If you only want a subset of fields to be serialized, you can 51 specify a `fields` argument to the serializer:: 52 53 from django.core import serializers 54 data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size')) 55 56 In this example, only the `name` and `size` attributes of each model will 57 be serialized. 58 59 .. note:: 60 61 Depending on your model, you may find that it is not possible to deserialize 62 a model that only serializes a subset of it's fields. If a serialized object 63 doesn't specify all the fields that are required by a model, the deserializer 64 will not be able to save deserialized instances. 46 65 47 66 Deserializing data … … 93 112 strings, etc.). Not really all that useful on its own, but 94 113 used as a base for other serializers. 114 115 ``yaml`` Serializes to YAML (Yet Another Markup Lanuage). This 116 serializer will only be made available if PyYAML_ is installed. 117 95 118 ========== ============================================================== 96 119 97 120 .. _json: http://json.org/ 98 121 .. _simplejson: http://undefined.org/python/#simplejson 122 .. _PyYAML: http://www.pyyaml.org/ 99 123 100 124 Notes for specific serialization formats django/trunk/tests/modeltests/serializers/models.py
r4796 r5409 160 160 <Author: Agnes> 161 161 162 # Serializer output can be restricted to a subset of fields 163 >>> print serializers.serialize("json", Article.objects.all(), fields=('headline','pub_date')) 164 [{"pk": "1", "model": "serializers.article", "fields": {"headline": "Just kidding; I love TV poker", "pub_date": "2006-06-16 11:00:00"}}, {"pk": "2", "model": "serializers.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": "3", "model": "serializers.article", "fields": {"headline": "Forward references pose no problem", "pub_date": "2006-06-16 15:00:00"}}] 165 162 166 """} django/trunk/tests/regressiontests/serializers_regress/models.py
r5371 r5409 206 206 # data = models.XMLField(primary_key=True) 207 207 208 class ComplexModel(models.Model): 209 field1 = models.CharField(maxlength=10) 210 field2 = models.CharField(maxlength=10) 211 field3 = models.CharField(maxlength=10) django/trunk/tests/regressiontests/serializers_regress/tests.py
r5371 r5409 10 10 11 11 import unittest, datetime 12 from cStringIO import StringIO 12 13 13 14 from django.utils.functional import curry … … 279 280 func[1](self, pk, klass, datum) 280 281 282 def fieldsTest(format, self): 283 # Clear the database first 284 management.flush(verbosity=0, interactive=False) 285 286 obj = ComplexModel(field1='first',field2='second',field3='third') 287 obj.save() 288 289 # Serialize then deserialize the test database 290 serialized_data = serializers.serialize(format, [obj], indent=2, fields=('field1','field3')) 291 result = serializers.deserialize(format, serialized_data).next() 292 293 # Check that the deserialized object contains data in only the serialized fields. 294 self.assertEqual(result.object.field1, 'first') 295 self.assertEqual(result.object.field2, '') 296 self.assertEqual(result.object.field3, 'third') 297 298 def streamTest(format, self): 299 # Clear the database first 300 management.flush(verbosity=0, interactive=False) 301 302 obj = ComplexModel(field1='first',field2='second',field3='third') 303 obj.save() 304 305 # Serialize the test database to a stream 306 stream = StringIO() 307 serializers.serialize(format, [obj], indent=2, stream=stream) 308 309 # Serialize normally for a comparison 310 string_data = serializers.serialize(format, [obj], indent=2) 311 312 # Check that the two are the same 313 self.assertEqual(string_data, stream.buffer()) 314 stream.close() 315 281 316 for format in serializers.get_serializer_formats(): 282 317 setattr(SerializerTests, 'test_'+format+'_serializer', curry(serializerTest, format)) 318 setattr(SerializerTests, 'test_'+format+'_serializer_fields', curry(fieldsTest, format)) 319 setattr(SerializerTests, 'test_'+format+'_serializer_stream', curry(fieldsTest, format))
