0

これは私のコードです:

class SocialNodeSubscription(model.Model):
  def __init__(self, *args, **kwargs):
    permissions=["post","read","reply","admin"]
    for p in permissions:
      self.__dict__["can_"+p]=model.BooleanProperty(default=True)        

モデルでフィールドを動的に定義する必要がありますが、 dictがフィールドを配置する適切な場所ではないため、これは機能しないようです。

ndbについて知らない人にとっては、これがより簡単な方法であるように見えるでしょう。

class SocialNodeSubscription(model.Model):
  def __init__(self, *args, **kwargs):
    self.can_write=model.BooleanProperty(default=True)
    self.can_read=model.BooleanProperty(default=True)
      ...

編集:

これで、私のコードは次のようになります。

def __init__(self, *args, **kwargs):
    permissions=["post","read","reply","admin"]

    for p in permissions:
        self._properties["can_"+p]=model.BooleanProperty(default=True)        
     self._fix_up_properties()

しかし、それでもこのエラーが発生します。

ファイル"C:\ Program Files(x86)\ Google \ google_appengine \ google \ appengine \ ext \ ndb \ model.py"、972行目、_store_value entity._values [self._name] = value TypeError:'NoneType'オブジェクトはアイテムの割り当てをサポートしていません

どういう意味ですか?

4

2 に答える 2

1

それは_propertiesです。メタクラスMetaModelとクラスメソッド_fix_up_propertiesを見てください。

_propertiesの定義:

 # Class variables updated by _fix_up_properties()
 _properties = None

方法:

  @classmethod
  def _fix_up_properties(cls):
  """Fix up the properties by calling their _fix_up() method.

  Note: This is called by MetaModel, but may also be called manually
  after dynamically updating a model class.
  """
于 2012-07-17T16:25:12.687 に答える
0

動的プロパティを持つモデルには、 expandoモデルを使用します。

于 2012-07-17T17:48:18.933 に答える