Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Python Django:POST请求时需要此字段_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django:POST请求时需要此字段

Python Django:POST请求时需要此字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试创建一个序列化程序,它输出报告和用户信息。 我的任务由此序列化程序完成: class ReportSerializer(serializers.ModelSerializer): latitude = serializers.CharField() longitude = serializers.CharField() city = serializers.IntegerField() type = serializers.IntegerField()

我正在尝试创建一个序列化程序,它输出报告和用户信息。 我的任务由此序列化程序完成:

class ReportSerializer(serializers.ModelSerializer):

    latitude = serializers.CharField()
    longitude = serializers.CharField()
    city = serializers.IntegerField()
    type = serializers.IntegerField()

    # We have created a field which returns a value from get_marker_icon_url
    marker_icon = serializers.SerializerMethodField('get_marker_icon_url')
    status_str = serializers.SerializerMethodField('convert_status_toStr')
    type_str = serializers.SerializerMethodField('convert_type_toStr')
    status_color = serializers.SerializerMethodField('get_status_color')
    likes = serializers.SerializerMethodField('random_likes')

    user = ReportUserSerializer()

    class Meta:
        model = Reports
        fields = [
            'user',
            'id', 
            'type',
            'city',
            'latitude', 
            'longitude',
            'likes', 
            'type_str', 
            'status_str', 
            'status_color', 
            'attached_message', 
            'marker_icon', 
            'attached_photo',
            'date_created'
        ]
...
使用此代码,我的序列化程序将返回如下响应:

[
    {
        "user": {
            "id": 1,
            "username": "3nematix",
            "profile_pic": "http://192.168.0.29:8000/frontend/static/frontend/images/reports/user_profile_pic.jpg",
            "verified": false
        },
        "id": 1,
        "type": 9,
        "city": 0,
        "latitude": "6.5123333",
        "longitude": "51.512586",
        "likes": 27,
        "type_str": "OTHER",
        "status_str": "PENDING",
        "status_color": "orange",
        "attached_message": "test",
        "marker_icon": "OTHER",
        "attached_photo": "http://192.168.0.29:8000/frontend/static/frontend/images/reports/user_profile_pic_VRjIYTs.jpg",
        "date_created": "2020-10-21T23:19:06.899302Z"
    },
    ......
]
这正是我所需要的,但问题是,当我试图通过POST请求创建新对象时,我得到以下响应:

{
    "user": [
        "This field is required."
    ]
}

如果我要从Meta中删除
'user'
,并从
ReportSerializer
类中删除
user=ReportUserSerializer()
,那么我可以创建一个新对象,但是当我希望获得报告时,我需要使用用户信息再次添加这两个对象,如何修复它?

在调用save之前,您需要自己填写用户字段。

以下是简单的方法:

class YourView(generics.ListCreateAPIView):
    ...

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
或者稍有不同:

class YourView(generics.ListCreateAPIView):
    ...
    def perform_create(self, serializer):
        serializer.validated_data['user'] = self.request.user
        return super().perform_create(serializer)