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

标签 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

update_address() 应该不会对 address.visibleaddress.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/

相关文章:

python - 是否可以删除输出文件的行?

python - 如何在 Python 中使用卡尔曼滤波器获取位置数据?

python - Django 模型 : Default for Choice Foreign Key

python - 不包括带有 @property 字段的 model_to_dict()

django - 使用 Apache 部署 Django

python - Django 不提供基于 ImageField 的图像

Python matplotlib set_array() 正好接受 2 个参数(给定 3 个)

python - sphinx-build 失败 - autodoc 无法导入/查找模块

python - "No matching distribution found for sqlite3"与 python3 和 virtualenv

javascript - 如何使用django + react有效处理大文件上传?