Pythonic方法检查变量是否作为kwargs传递?

dvt*_*tan 6 python django

visible = models.BooleanField()
owner = models.ForeignKey(User, null=True)

def update_address(**kwargs):
    address = Address.objects.get(address=kwargs.get('address'))
    try:
        address.visible = kwargs.get('visible')
    except:
        pass
    try:
        address.owner = kwargs.get('owner')
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

update_address()应该导致没有发生任何事情address.visibleaddress.owner.

update_address(owner=None) 应删除已设置的任何现有所有者对象.

令我困惑的是如何判断是否owner=None已明确设置,因此我知道删除现有的所有者对象,或者如果调用它而没有owner设置为任何东西,那么我应该保留所有者的原样.

Du *_* D. 9

您可以使用"in"关键字来检查密钥是否存在,或者您可以在get(key,default)函数的第二个参数中指定默认参数

if 'visible' in kwargs:
   do something

# OR

visible = kwargs.get('visible', False) 
Run Code Online (Sandbox Code Playgroud)

更新:

如果你的super()类(即父模型)没有采用可见的参数,你可以使用pop(key,default)来提取参数,然后再将其传递给super.我认为这对你来说也很有用.

def __init__(self, *args, **kwargs):
   visible = kwargs.pop('visible', False)
   super().__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)