我正在試驗stdnet,我對這個應該是一個相對簡單的案例有挑戰。redis/stdnet數據模型追蹤
如果我填充我的模型(見下文<hr>
),不指定主鍵的值,我得到:
stdnet.utils.exceptions.FieldValueError: {"author_id": "Field 'author_id' is required for 'main.book'."}
author1 = models[Author](name='Jeff Doyle')
然而,對於id
增加值使代碼工作..
author1 = models[Author](name='Jeff Doyle', id=1)
Author.id
是odm.AutoIdField()
。由於這是一個分層數據模型,因此我可能能夠理解手動將id = odm.AutoIdField()
添加到我的模型的要求。但是,文檔說明odm.AutoIdField會自動生成主鍵的值。
我的問題:爲什麼我需要手動指定一個值爲id
當我填充我的模型?
我跑stdnet 0.8.2瓦特/用Cython,關於Python 2.6.6和Debian 6.0(內核2.6.32-5-AMD64)。
工作實例:
from stdnet import odm
class Author(odm.StdModel):
id = odm.AutoIdField(primary_key=True, unique=True)
name = odm.SymbolField()
def __unicode__(self):
return self.name
class Book(odm.StdModel):
id = odm.AutoIdField(primary_key=True, unique=True)
title = odm.CharField()
author = odm.ForeignKey(Author, related_name='books')
def __unicode__(self):
return "<Book '%s' by %s>" % (self.title, self.author)
if __name__=='__main__':
models = odm.Router('redis://localhost:6379?db=0')
models.register(Author)
models.register(Book)
session = models.session()
session.begin()
author1 = models[Author](name='Jeff Doyle', id=1)
session.add(author1)
book1 = models[Book](title='Routing TCP/IP, Volume 1', id=2, author=author1)
session.add(book1)
session.commit()
回溯:
Traceback (most recent call last):
File "stdnet_example.py", line 31, in <module>
session.commit()
...
stdnet.utils.exceptions.FieldValueError: {"author_id": "Field 'author_id' is required for '__main__.book'."}
因爲你來了一個「要求」字段 –
我也試過沒有'required',但我仍然得到traceback –