Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django rest框架中保存时间戳字段_Django_Django Rest Framework - Fatal编程技术网

如何在django rest框架中保存时间戳字段

如何在django rest框架中保存时间戳字段,django,django-rest-framework,Django,Django Rest Framework,serializer.py文件 class TabsionSerializer(serializers.ModelSerializer): class Meta: model = Tabsion fields = ('sen_id','det_id','latitude','longitude','start_or_end','user_id','username','type','timestamp') 在上面的示例中,时间戳字段由数据库自动设置,

serializer.py文件

class TabsionSerializer(serializers.ModelSerializer):
     class Meta:
        model = Tabsion
        fields = ('sen_id','det_id','latitude','longitude','start_or_end','user_id','username','type','timestamp')

在上面的示例中,时间戳字段由数据库自动设置,类型字段默认设置为1。因此,这些字段没有添加到数据库中

View.py

class StartReportSave(viewsets.ModelViewSet):
    def post(self,request,format=None):
        reqData  = json.loads(request.body.decode("utf-8"))
        savData  = {}
        savData['sen_d'] = reqData['data']['section']['id'];
        savData['det_id'] = reqData['data']['depot']['id'];
        savData['latitude'] = reqData['data']['locationData']['latitude'];
        savData['longitude'] = reqData['data']['locationData']['longitude'];
        savData['start_or_end'] = reqData['data']['start_or_end'] ;
        savData['username']= reqData['userData'][0]['username'];
        savData['user_id']= reqData['userData'][0]['id'];   
        serializer = TabsionSerializer(data=savData)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data,status=201))

        return JsonResponse(savData,safe=False)

model.py

当我尝试添加数据时,会出现错误

时间戳、类型字段是必需的

我如何解决这个问题

获取此插入记录的id并将其添加到另一个日志表的正确方法是什么

  • 使用只读字段

    class TabsionSerializer(serializers.ModelSerializer):
        class Meta:
            model = Tabsion
            fields = ('sen_id','det_id','latitude','longitude','start_or_end','user_id','username','type','timestamp')
            read_only_fields = ('type','timestamp') 
    
  • save_数据由所需的id组成

    save_data = serializer.save(data=data)
    
    instance_id = save_data.id`
    
  • 在extra_kwargs中设置read_only=True将为您带来好处

    阅读更多:

    或者您可以使用只读字段

    阅读更多:

    建议采用第二种解决方案


    您可以在Tabsion模型中为时间戳字段设置“立即自动”

    timestamp = models.DateTimeField(auto_now=True)
    
    class TabsionSerializer(serializers.ModelSerializer):
     class Meta:
        model = Tabsion
        fields = ('sen_id','det_id','latitude','longitude','start_or_end','user_id','username','type','timestamp')
        extra_kwargs = {'type': {'read_only': True, 'required': False}, 'timestamp': {'read_only': True, 'required': False}}
    
    class TabsionSerializer(serializers.ModelSerializer):
        class Meta:
            model = Tabsion
            fields = ('sen_id','det_id','latitude','longitude','start_or_end','user_id','username','type','timestamp')
            read_only_fields = ('type','timestamp')
    
    timestamp = models.DateTimeField(auto_now=True)