有一个Django模型和一个对应的rest_framework序列化器,其字段类型为json。
from jsonfield.fields importJSONField
class Data(models.Model):
title = models.TextField(null=True)
detail = JSONField(null=True)
class DataSerializer(serializers.Serializer):
title = serializers.CharField(required=False, allow_null=True)
detail = serializers.JSONField(required=False, allow_null=True)
在将数据插入模型期间,将引发错误。
ERROR invalid input syntax for integer: "Sample"
LINE 3: ...AY['id', 'name'], ARRAY[1, 'Sample']...
如果detail
字段的数据为{'id':1, 'name': 'Sample'}
。如果数据更改为{'id':'1', 'name': 'Sample'}
,则不会出现此错误。
当数据为{'id':1, 'name': 'Sample'}
时是否有处理数据的方法? detail
字段是否有更好的类型?还是应该修改该字段?
答案 0 :(得分:0)
我无法复制该错误。
可以肯定的是,您正在连接到Postgres数据库并且正在使用内置的JSONfield?数据库是干净的,并且迁移都已应用?
在通过DRF可浏览的UI发布json负载以创建新模型时,以下内容对我来说很好:
媒体类型: application / json
内容:
{
"title": "test data",
"detail": {"id":1, "name": "Sample"}
}
settings.py
# ...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': '', # snipped
'USER': '', # snipped
'PASSWORD': '', # snipped
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
urls.py
from django.contrib import admin
from drfsandpit.restapi import views
router = routers.DefaultRouter()
router.register(r'data', views.DataViewSet)
views.py
from rest_framework import viewsets
from .models import Data
from .serializers import DataSerializer
class DataViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Data.objects.all()
serializer_class = DataSerializer
serializers.py
from rest_framework import serializers
from .models import Data
class DataSerializer(serializers.ModelSerializer):
title = serializers.CharField(required=False, allow_null=True)
detail = serializers.JSONField(required=False, allow_null=True)
class Meta:
model = Data
fields = ('title', 'detail')
models.py
from django.db import models
from django.contrib.postgres.fields import JSONField
class Data(models.Model):
title = models.TextField(null=True)
detail = JSONField(null=True)