我有一个关于传递**kwargs
的问题。在views.py
我正在收集order_id
等数据。我将这些数据传递给我称之为ChargeManager
的收费函数。对于每个def
我目前正在通过kwargs。但是,我希望找到一种方法,我只需要在views.py
中编写一次。然后我可以使用**kwargs
来收集数据并传递它们。无论我想要什么,我都在努力让它发挥作用。你有什么想法吗?
示例我希望它如何工作:
1)
paid = instance.charge(order_id=session_order_id, total=total, token=token)
2)models.py
:
TransactionProfile
def charge(self, **kwargs):
return Charge.objects.stripe_charge(self, order_id, total, token)
3)models.py
:
ChargeManager
def stripe_charge(self, **kwargs):
print(order_id)
目前,我必须这样做:
views.py
paid = instance.charge(order_id=session_order_id, total=total, token=token)
models.py
def charge(self, order_id, total, token):
return Charge.objects.stripe_charge(self, order_id, total, token)
models.py
:
TransactionProfile
def charge(self, order_id, total, token):
return Charge.objects.stripe_charge(self, order_id, total, token)
models.py
:
ChargeManager
def stripe_charge(self, transaction_profile, order_id, total, token):
答案 0 :(得分:2)
如果你的函数接受kwargs,你可以使用相同的kwargs调用另一个方法:
def charge(self, **kwargs):
return Charge.objects.stripe_charge(self, transaction_profile=self, **kwargs)
如果您的stripe_charge
方法仅接受kwargs
,则您无法再使用print(order_id)
。您必须从kwargs
def stripe_charge(self, **kwargs):
print(kwargs['order_id'])
我不确定我是否鼓励您像这样使用**kwargs
。当我看到方法def charge(self, order_id, total, token):
时,它会立即清楚如何调用它。 def charge(self, **kwargs)
不太清楚。