我现在拥有的最佳解决方案。对于大多数人来说,不是pythonic,我希望!
# First Check if at least one of the two values exist in the OrderedDict.
if 'content' in validated_data or 'location' in validated_data:
# If one exists, make sure it is not empty
if 'content' in validated_data:
if not validated_data['content']:
raise MyException("You cannot have blank values")
if 'location' in validated_data:
if not validated_data['location']:
raise MyException("You cannot have blank values")
return validated_data
raise MyException("You need at least one field")
答案 0 :(得分:6)
如果缺少密钥,您可以使用dict.get()
返回默认值;使用它来测试两个键和值:
if not (validated_data.get('content') or validated_data.get('location')):
raise MyException("You need at least one non-blank field")
return validated_data
如果validated_data['content']
存在,validated_data.get('content')
将返回它。如果不存在,则返回None
,返回false值。因此,当密钥存在但是错误时,并且当密钥丢失时,最终结果为假值并且测试'location'
密钥。如果密钥存在且不是假值,则or
表达式会短路。