我尝试使用序列化程序更新对象,但它根本不会更新任何内容。我构建了最简单的测试应用程序,但仍然没有成功。 我使用 django 1.6.2 和 django-rest-framework 2.3.13
我的models.py
(注意:blank
和noblank
字段名称具有误导性,我知道。这只是我想尝试之前问题是由于空白字段,但它不是):
from django.db import
class Test(models.Model):
blank = models.CharField(max_length=200)
noblank = models.CharField(max_length=200)
def __unicode__(self):
return "{0} - {1}".format(self.blank, self.noblank)
我的serializers.py
:
from rest_framework import serializers
from update_test.models import Test
class TestSerializer(serializers.ModelSerializer):
class Meta:
model = Test
我在shell中做的测试:
In [1]: from update_test.models import *
In [2]: from update_test.serializers import *
In [3]:
In [3]:
In [3]: test1 = Test.objects.first()
In [4]:
In [4]: serializer1 = TestSerializer(test1)
In [5]: serializer1.data
Out[5]: {u'id': 1, 'blank': u'blank1', 'noblank': u'noblank1'}
In [6]:
In [6]: from rest_framework.renderers import JSONRenderer
In [7]:
In [7]: json1 = JSONRenderer().render(serializer1.data)
In [8]: json1
Out[8]: '{"id": 1, "blank": "blank1", "noblank": "noblank1"}'
In [9]:
In [9]: from StringIO import StringIO
In [10]: from rest_framework.parsers import JSONParser
In [11]:
In [11]: stream1 = StringIO(json1)
In [12]: data1 = JSONParser().parse(stream1)
In [13]:
In [13]: serializer1 = TestSerializer(data=data1)
In [14]: serializer1.is_valid()
Out[14]: True
In [15]:
In [15]: serializer1.object
Out[15]: <Test: blank1 - noblank1>
In [16]:
In [16]: data1[u'blank'] = u'test'
In [17]: data1[u'noblank'] = u'notest'
In [18]:
In [18]: deser = TestSerializer(test1, data=data1)
In [19]:
In [19]: deser.data
Out[19]: {u'id': 1, 'blank': u'blank1', 'noblank': u'noblank1'}
In [20]: deser.save()
Out[20]: <Test: blank1 - noblank1>
In [21]: deser.object
Out[21]: <Test: blank1 - noblank1>
从第18行可以看出,我将对象更新并将新数据传递给序列化程序。但是对象和序列化器都没有改变。
这是最简单的示例,它与docs中的示例完全相同。 有人看到我忘记了什么吗?