2

我正在努力获得一个可写的 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

4

0 回答 0