下面的方法不起作用,因为它是一个函数中的positional argument & keyword argument
。据我了解,一般来说,kwargs
更好,因为您可以顺便订购。但是,如何更改request.POST
才能使用kwargs
?
form_refund = RefundForm(
order=order,
request.POST,
)
答案 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)
: