Changeset 6264
- Timestamp:
- 09/15/07 00:32:29 (2 years ago)
- Files:
-
- django/trunk/django/core/serializers/python.py (modified) (3 diffs)
- django/trunk/tests/modeltests/fixtures/models.py (modified) (1 diff)
- django/trunk/tests/modeltests/serializers/models.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/core/serializers/python.py
r5609 r6264 28 28 self.objects.append({ 29 29 "model" : smart_unicode(obj._meta), 30 "pk" : smart_unicode(obj._get_pk_val() ),30 "pk" : smart_unicode(obj._get_pk_val(), strings_only=True), 31 31 "fields" : self._current 32 32 }) … … 34 34 35 35 def handle_field(self, obj, field): 36 self._current[field.name] = getattr(obj, field.name)36 self._current[field.name] = smart_unicode(getattr(obj, field.name), strings_only=True) 37 37 38 38 def handle_fk_field(self, obj, field): … … 45 45 # Related to remote object via other field 46 46 related = getattr(related, field.rel.field_name) 47 self._current[field.name] = related47 self._current[field.name] = smart_unicode(related, strings_only=True) 48 48 49 49 def handle_m2m_field(self, obj, field): 50 self._current[field.name] = [related._get_pk_val() for related in getattr(obj, field.name).iterator()] 50 self._current[field.name] = [smart_unicode(related._get_pk_val(), strings_only=True) 51 for related in getattr(obj, field.name).iterator()] 51 52 52 53 def getvalue(self): django/trunk/tests/modeltests/fixtures/models.py
r5915 r6264 75 75 # Dump the current contents of the database as a JSON fixture 76 76 >>> management.call_command('dumpdata', 'fixtures', format='json') 77 [{"pk": "3", "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": "2", "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": "1", "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]77 [{"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}] 78 78 """} 79 79 django/trunk/tests/modeltests/serializers/models.py
r5876 r6264 1 # -*- coding: utf-8 -*- 1 2 """ 2 3 41. Serialization … … 44 45 def __unicode__(self): 45 46 return u"Profile of %s" % self.author 47 48 class Actor(models.Model): 49 name = models.CharField(max_length=20, primary_key=True) 50 51 class Meta: 52 ordering = ('name',) 53 54 def __unicode__(self): 55 return self.name 56 57 class Movie(models.Model): 58 actor = models.ForeignKey(Actor) 59 title = models.CharField(max_length=50) 60 61 class Meta: 62 ordering = ('title',) 63 64 def __unicode__(self): 65 return self.title 46 66 47 67 __test__ = {'API_TESTS':""" … … 102 122 >>> json = serializers.serialize("json", Category.objects.filter(pk=2)) 103 123 >>> json 104 '[{"pk": "2", "model": "serializers.category", "fields": {"name": "Music"}}]'124 '[{"pk": 2, "model": "serializers.category", "fields": {"name": "Music"}}]' 105 125 106 126 # You can easily create new objects by deserializing data with an empty PK … … 134 154 >>> json = serializers.serialize("json", AuthorProfile.objects.all()) 135 155 >>> json 136 '[{"pk": "1", "model": "serializers.authorprofile", "fields": {"date_of_birth": "1970-01-01"}}]'156 '[{"pk": 1, "model": "serializers.authorprofile", "fields": {"date_of_birth": "1970-01-01"}}]' 137 157 138 158 >>> for obj in serializers.deserialize("json", json): … … 142 162 # Objects ids can be referenced before they are defined in the serialization data 143 163 # However, the deserialization process will need to be contained within a transaction 144 >>> json = '[{"pk": "3", "model": "serializers.article", "fields": {"headline": "Forward references pose no problem", "pub_date": "2006-06-16 15:00:00", "categories": [4, 1], "author": 4}}, {"pk": "4", "model": "serializers.category", "fields": {"name": "Reference"}}, {"pk": "4", "model": "serializers.author", "fields": {"name": "Agnes"}}]'164 >>> json = '[{"pk": 3, "model": "serializers.article", "fields": {"headline": "Forward references pose no problem", "pub_date": "2006-06-16 15:00:00", "categories": [4, 1], "author": 4}}, {"pk": 4, "model": "serializers.category", "fields": {"name": "Reference"}}, {"pk": 4, "model": "serializers.author", "fields": {"name": "Agnes"}}]' 145 165 >>> from django.db import transaction 146 166 >>> transaction.enter_transaction_management() … … 162 182 # Serializer output can be restricted to a subset of fields 163 183 >>> 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"}}] 184 [{"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"}}] 185 186 # Every string is serialized as a unicode object, also primary key 187 # which is 'varchar' 188 >>> ac = Actor(name="Zażółć") 189 >>> mv = Movie(title="Gęślą jaźń", actor=ac) 190 >>> ac.save(); mv.save() 191 192 # Let's serialize our movie 193 >>> print serializers.serialize("json", [mv]) 194 [{"pk": 1, "model": "serializers.movie", "fields": {"actor": "Za\u017c\u00f3\u0142\u0107", "title": "G\u0119\u015bl\u0105 ja\u017a\u0144"}}] 195 196 # Deserialization of movie 197 >>> list(serializers.deserialize('json', serializers.serialize('json', [mv])))[0].object.title 198 u'G\u0119\u015bl\u0105 ja\u017a\u0144' 199 200 # None is null after serialization to json 201 # Primary key is None in case of not saved model 202 >>> mv2 = Movie(title="Movie 2", actor=ac) 203 >>> print serializers.serialize("json", [mv2]) 204 [{"pk": null, "model": "serializers.movie", "fields": {"actor": "Za\u017c\u00f3\u0142\u0107", "title": "Movie 2"}}] 205 206 # Deserialization of null returns None for pk 207 >>> print list(serializers.deserialize('json', serializers.serialize('json', [mv2])))[0].object.id 208 None 165 209 166 210 """}
