Django:同时使用位置参数和关键字参数

时间:2018-08-03 07:54:46

标签: python django

下面的方法不起作用,因为它是一个函数中的positional argument & keyword argument。据我了解,一般来说,kwargs更好,因为您可以顺便订购。但是,如何更改request.POST才能使用kwargs

form_refund = RefundForm(
    order=order,
    request.POST,
)

2 个答案:

答案 0 :(得分:1)

发表评论后,我对您要做的事情有了更好的了解。

我想您的init方法看起来像这样:

def __init__(self, order=None, *args, **kwargs):

因此,您尝试调用RefundForm(order=order, request.POST),其中request.POST是位置参数,是*args之一。

您打算将其重写为:

def __init__(self, *args, **kwargs, order):

也不起作用。这里的order是在*args**kwargs之后定义的位置参数。

我认为最好的方法是:

def __init__(self, *args, **kwargs):
    order = kwargs.pop('order', None)

现在,您可以通过调用RefundForm(request.POST, order=order)实例化对象。这里的order=order是关键字参数,并由**kwargs覆盖。

答案 1 :(得分:0)

所有位置args必须位于关键字参数之前。由于request.POST处于位置,因此需要将其放置在order=order之前。

form_refund = RefundForm( request.POST, order=order, )

如果您不知道什么是初始化函数的正确方法,则可以通过以下两种方法进行:

def __init__(self, request)

或还可以在初始化中添加关键字参数并为其设置默认值

def __init__(self, request, order=None)