2015-10-14 89 views
5

我在Python Eve基於REST風格的服務與SQLAlcemy後端。我有兩個型號,一個一對多的關係:Python Eve,SQLalchemy和ForeignKey

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

插入,更新和刪除users當這個偉大的工程。但是,我不能得到folders插入右:

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的文檔,我無法真正理解我做錯了什麼。我在userfolder插入之間看到的唯一區別是它有一個外鍵。

任何想法爲什麼會發生這種情況?

回答

5

嗯,這似乎是問題是,我沒有對資源和表名(「用戶」資源,「用戶」爲表名)相同的名稱。這似乎引發了外鍵的問題,但不會因沒有關係的實體而失敗。

更改表名以匹配資源名稱解決了問題。

我希望這對任何人都有用。

+0

請您詳細說明您的解決方案......我處於類似的情況。表B在表A中有一個外鍵。在表A(父)中插入是可以的,但試圖插入到表B時拋出錯誤'「cpa_id」:「未知字段」 – dnafication