具有“None”值的NDB重复属性列表

2024-09-21 01:03:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个属性类型,它可以使用Python接口设置NDB的True、False和None值。对于单个属性属性,这是相当容易做到的。在

然而,对于repeated属性属性(repeated=True),似乎不可能将列表项设置为None。无论我尝试过哪种方法,NDB库都会引发异常。在

一次尝试如下:

class LOGICAL(ndb.GenericProperty):

  def _set_value(self, entity, value):
    if isinstance(value, (list, tuple, set, frozenset)):
        for i, val in enumerate(value):
            if isinstance(val, str):
                if val.lower() in ('unknown', 'none'):
                    value[i] = None
    if isinstance(value, str):
        if value.lower() in ('unknown', 'none'):
            value = None
    ndb.Property._set_value(self, entity, value)

  def _validate(self, value):
    if isinstance(value, str):
        if value.lower() == 'true':
            return True
        if value.lower() == 'false':
            return False
        raise AssertionError('LOGICAL must be one of "true","false","unknown","none" or'
                             'True, False, None.')
    if value is not None:
        assert isinstance(value, bool)

当一个单一的属性被拒绝时,[我不想为任何一个逻辑属性赋值',但我不想为一个逻辑属性赋值。我从后台的“machine”和一个很长很长的堆栈跟踪中得到以下警告。在

^{pr2}$

如果我的任务是不可能完成的,或者采取哪种方法,请告诉我。在


Tags: inselfnonefalsetrueif属性value
1条回答
网友
1楼 · 发布于 2024-09-21 01:03:17

_validate无法正确处理“未知”和“无”的情况:

        if value.lower() in ('unknown', 'none'):
            return None

然后,在函数的最后:

^{pr2}$

因此,得到的函数是:

def _validate(self, value):
    if isinstance(value, str):
        if value.lower() == 'true':
            return True
        if value.lower() == 'false':
            return False
        if value.lower() in ('unknown', 'none'):    # Add these two lines
            return None
        raise AssertionError('LOGICAL must be one of "true","false","unknown","none" or'
                             'True, False, None.')
    if value is not None:
        assert isinstance(value, bool)
    return value

相关问题 更多 >

    热门问题