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
update_address()
应该不会对 address.visible
或 address.owner
产生任何影响。
update_address(owner=None)
应删除已设置的任何现有所有者对象。
让我困惑的是如何判断 owner=None
是否被显式设置以便我知道删除现有的所有者对象,或者它是否在没有 owner
的情况下被调用设置为任何值,所以我应该让所有者保持原样。
最佳答案
您可以使用“in”关键字来检查 key 是否存在,或者您可以在 dict.get(key, default) 函数的第二个参数中指定默认参数
if 'visible' in kwargs:
do something
# OR
visible = kwargs.get('visible', False)
更新:
如果您的 super() 类(即父模型)不采用可见参数,您可以使用 dict.pop(key, default) 在将参数传递给 super 。我认为这对您也很有用。
def __init__(self, *args, **kwargs):
visible = kwargs.pop('visible', False)
super().__init__(*args, **kwargs)
关于检查变量是否作为 kwargs 传递的 Pythonic 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092528/