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.visible或address.owner.
update_address(owner=None) 应删除已设置的任何现有所有者对象.
令我困惑的是如何判断是否owner=None已明确设置,因此我知道删除现有的所有者对象,或者如果调用它而没有owner设置为任何东西,那么我应该保留所有者的原样.
您可以使用"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)