"不是有效的字符串。" - 在Django Rest Framework中尝试将dict保存到TextField时出错

时间:2018-05-16 14:58:32

标签: python django django-rest-framework

我的 models.py

中有以下代码
ext <- raster[[1]]@extent    # 1st day extent area

date = as.Date(as.numeric(raster[[1]]@z), origin = "1960-01-01", tz = "GMT", format = "%Y-%m-%d")     # 1st day Date

serializers.py

> raster[[1]]

class       : RasterLayer 
band        : 1  (of  31  bands)
dimensions  : 110, 74, 8140  (nrow, ncol, ncell)
resolution  : 1, 1  (x, y)
extent      : -42, 32, -55, 55  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
data source : /data/input/raster.nc 
names       : var1 
z-value     : 20667.5 
zvar        : var1 


> raster[1]

[[1]]
File /data/input/raster.nc (NC_FORMAT_CLASSIC):

 2 variables (excluding dimension variables):
    int var1[longitude,latitude,time]   
        units: nodimension
    int var2[longitude,latitude,time]   
        units: nodimension

 3 dimensions:
    longitude  Size:74
        units: degrees east
        long_name: Longitude
    latitude  Size:110
        units: degrees north
        long_name: Latitude
    time  Size:31
        units: Julian days since 1960-1-01

6 global attributes:
    Title: Rain Rate every 1 degree
    Date Beg: 2016-08-01 00:00:00
    Date End: 2016-08-31 23:59:59
    Author: LastName, FirstName
    Sensor: GEO
    Conventions: CF-1.0

views.py

class ApiLog(models.Model):
...
incoming_data = models.TextField('incoming data', null=True, blank=True)

在POST请求中,我发送:

class ApiLogSerializer(serializers.ModelSerializer):
    class Meta:
        model = ApiLog
        fields = ('incoming_data',)  

在视图中尝试 serializer.is_valid()时出错:

class ApiLogViewSet(APIView):
    def post(self, request, format=None):
        serializer = ApiLogSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()

也许是因为我尝试将字典保存到TextField?

是否可以将此词典保存到TextField?建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

试试引号?:

data = {..., 
        'incoming_data':'{"key1":"value1","key2":"value2"}'
       }

答案 1 :(得分:0)

在序列化程序中尝试此操作:

class ApiLogSerializer(serializers.ModelSerializer):
    incoming_data = serializers.JSONField() # change is here

    class Meta:
        model = ApiLog
        fields = ('incoming_data',)

这会将您的JSON dict转换为字符串并将其作为Text存储在数据库中。

有关详细信息,请参阅official DRF documentation