Peewee Python ORM:将查询结果分配给ForeignKeyField

时间:2014-01-15 17:28:39

标签: python orm peewee

我有2个模型,具有简单的一对多关系。我正在尝试将查询其中一个的结果分配给另一个实体,但我不知道该怎么做。这是代码:

主类继承自2个类,并且还重载了__init__方法

class Bot(MySQLDatabase, ClientXMPP):
    room = ForeignKeyField(Room)

在某些时候,我查询并尝试分配:

def __init__(self, ..., ..., room):
    DBConnection.connect()

    self.room = Room.get(...)
    self.save()

但它引发了我的异常:

Traceback (most recent call last):
  File "main.py", line 25, in <module>
    xmpp = Bot(..., ..., room)
  File "/home/.../bot.py", line 29, in __init__
    self.room = room
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 724, in __set__
    instance._data[self.att_name] = value.get_id()
TypeError: 'NoneType' object does not support item assignment

我刚刚开始使用这个库,所以这可能是由于对文档的误解。

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题但是如果其他人收到此错误,我发现此链接:Peewee models perform initialization on startup因此您必须在任何peewee模型构造函数中调用super。

所以,

def __init__(self, ..., ..., room):
   DBConnection.connect()

   self.room = Room.get(...)
   self.save()


会成为:

def __init__(self, ..., ..., room):
   super(Bot, self).__init__()
   DBConnection.connect()
   self.room = Room.get(...)
   self.save()