Django:传递** kwargs

时间:2018-04-18 12:23:58

标签: python django kwargs

我有一个关于传递**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):

1 个答案:

答案 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)不太清楚。