有一个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
字段是否有更好的类型或是否应修改字段?
我无法复制错误。
可以肯定的是,您正在连接到Postgres数据库并使用内置的JSONfield?数据库是干净的,迁移都是应用的吗?
当通过DRF可浏览UI发布json有效负载以创建新模型时,以下工作对我来说很合适
媒体类型:application / json
内容:
{
"title": "test data",
"detail": {"id":1, "name": "Sample"}
}
settings.朋友
# ...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': '', # snipped
'USER': '', # snipped
'PASSWORD': '', # snipped
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
URLs.朋友
from django.contrib import admin
from drfsandpit.restapi import views
router = routers.DefaultRouter()
router.register(r'data', views.DataViewSet)
views.朋友
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
serialize认识.朋友
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.朋友
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)