我正在使用SQLAlcemy后端开发基于Python Eve的RESTful服务.我有两个具有一对多关系的模型:
class User(CommonColumns):
"""Model of an user in the database"""
__tablename__ = "user"
id = Column(Integer, primary_key=True)
username = Column(String, unique=True)
email = Column(EmailType, unique=True)
folders = relationship('Folder', backref='user')
def __unicode__(self):
return self.username
class Folder(CommonColumns):
"""Model of an user in the database"""
__tablename__ = "folder"
id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
user_id = Column(Integer, ForeignKey('user.id'), nullable=False)
def __unicode__(self):
return "{}/{}".format(self.user.username, self.name)
CommonColumns定义为here
这在插入,更新和删除用户时非常有用.但是,我无法插入文件夹:
newfolder = {
'name':'FOLDER',
'user_id': 1,
}
response = requests.post("http://localhost:8080/api/v1.0/folders",data=newfolder)
print response.json()
{u'_error': {u'code': 422,
u'message': u'Insertion failure: 1 document(s) contain(s) error(s)'},
u'_issues': {u'exception': u"'user'"},
u'_status': u'ERR'}
这是一个相当神秘的错误消息.我一直在阅读Python Eve的文档,我无法理解我做错了什么.我在用户和文件夹插入之间看到的唯一区别是一个有外键.
知道为什么会这样吗?
解决方法:
好吧,似乎问题是我没有资源和表名的相同名称(资源的“users”,表名的“user”).这似乎在前夕引发了外键问题,但对于没有关系的实体不会失败.
更改表名以匹配资源名称解决了问题.
我希望这对任何人都有用.