Django Rest Framework:ID为POST的对象

时间:2018-08-09 14:11:11

标签: python django django-rest-framework

是否可以在发布新对象的同时指定其ID而不是自动递增?这是一次导入,之后将更正数据库ID序列。

class TestModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = TestModel
        fields = ('id', 'name')

class TestModelViewSet(viewsets.ModelViewSet):
    queryset = TestModel.objects.all()
    serializer_class = TestModelSerializer

import requests
def test_post(endpoint):
    data = {
        "id": 30,
        "name": "Test",
    }
    r = requests.post(endpoint, data=data)
    print(r.status_code, r.reason)

test_post('http://localhost:8000/api/test_model/30/')
>>> 405 Method Not Allowed

test_post('http://localhost:8000/api/test_model/')
>>> 201 Created

201 Created创建一个新对象,但其顺序是下一个ID而不是所需的ID。

我也尝试过r = requests.put('http://localhost:8000/api/test_model/30/', data=data),但得到了404 Not Found

1 个答案:

答案 0 :(得分:1)

这可能有效,但是我不确定,我相信django-rest正在从您的django模型中读取id为自动递增字段,因此无法使用提供的id创建。但是,如果您将其明确指定为整数字段,则可以使用。

class TestModelSerializer(serializers.ModelSerializer):

    id = serializers.IntegerField()

    class Meta:
        model = TestModel
        fields = ('id', 'name')