Django Rest Framework从URL中获取一个参数,忽略正文中的参数

时间:2016-07-08 00:49:45

标签: python django django-rest-framework

我正在使用Django 1.9和Django Rest Framework 3.3。我有传入的POST请求,可以是dictlist,也可以访问相同的API端点。端点URL如下所示:/api/children/3/classes。此3表示孩子的ID。

我的传入POST请求如下所示:

{
   "name": "Mathematics",
   "teacher": "Mr. Kabbatt",
   "school": "High School"
   "child": 2
}

在这种情况下,我给了一个dict,但它也可以是一个dicts的数组(列表)。

如何强制Django Rest Framework 忽略在POST正文中设置的child参数,使用URL中的参数?我使用ListCreateAPIView泛型,我已经能够在child方法中获取get_queryset()参数。在序列化器方面,我使用DRF的简单ModelSerializer并包含所有字段。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望使用url提供的参数覆盖请求正文中的child值。

def post(self, request, *args, **kwargs):
    # django passes params from url in kwargs
    # e.g. {id: 3} or {child: 3}, not sure what your url calls it
    if request.data.__class__ is dict:
        request.data['child'] = kwargs['id']
    elif request.data.__class__ is list:
        # dunno what your setup looks like here
        for i in request.data:
            request.data[i]['child'] = kwargs['id']
    self.create(request, *args, **kwargs)