我正在努力获得一个可写的 JSON 字段,其中 JSON 字段由JSONField支持。
为什么data
永远不会正确存储
模型.py
from django_extensions.db.fields.json import JSONField
class Tracker(models.Model):
identifier = models.CharField(max_length=255, db_index=True)
identifier_type = models.CharField(max_length=24, choices=IDENTIFIER_TYPE)
data_type = models.CharField(max_length=12, choices=DATA_TYPES)
data = JSONField()
api.py
class JSONSerializerField(Field):
def to_internal_value(self, data):
return json.loads(data)
def to_representation(self, value):
return value
class TrackerSerializer(ModelSerializer):
data = JSONSerializerField()
class Meta:
model = Tracker
fields = ('id', 'identifier', 'identifier_type', 'data_type', 'data')
class TrackerList(ListCreateAPIView):
queryset = Tracker.objects.all()
serializer_class = TrackerSerializer
class ChangeTrackerDetail(RetrieveUpdateDestroyAPIView):
queryset = Tracker.objects.all()
serializer_class = TrackerSerializer
当我发布基本请求时 - 它从不推送数据
payload = {
'data': [{'change': 1234,
'errors': [{'count': 2, 'type': 'M1 Spacing'},
{'count': 1, 'type': 'M1 Over Gate Width'}],
'results': 'fail',
'tool': 'calibre',
'user': 'bob',
'version': '12.2'}],
'data_type': 'generic',
'identifier': 'e0f91578070ce47a048f6608e6543b6e',
'identifier_type': 'hash'}
r = requests.post(url, payload)
r.json()
{u'data_type': u'generic', u'identifier_type': u'hash', u'identifier': u'e0f91578070ce47a048f6608e6543b6e', u'data': {}, u'id': 4434}
参考:DRF 版本 3.2.5