2013-01-01 135 views
1

當我嘗試在GAE中提交新實體時,出現以下錯誤消息。創建GAE實體時遇到問題

File "C:\Users\Chris\Documents\Web Apps\legalstudybuddy\main.py", line 179, in post 
    c = Courses(user=user, title=title) 
TypeError: __init__() got an unexpected keyword argument 'user' 

這裏是我的Python代碼:

class Courses(db.Model): 
    user = db.StringProperty(required = True) 
    title = db.StringProperty(required = True) 
    created = db.DateTimeProperty(auto_now_add = True) 

class Courses(Handler): 
    def get(self, courses="", title="", signup_username="", login_logout=""): 

     if not self.user: 
      self.redirect('/login') 

     user = str(self.read_secure_cookie('user_id')) 
     courses = db.GqlQuery('SELECT * from Courses WHERE user = :user ORDER BY created DESC', user=user) 

     signup_username, login_logout = self.user_check() 

     self.render('courses.html', courses=courses, 
        title=title, 
        signup_username=signup_username, 
        login_logout=login_logout) 

    def post(self): 
     if not self.user: 
      self.redirect('/login') 

     user = str(self.read_secure_cookie('user_id')) 
     title = self.request.get('title') 

     if title: 
      c = Courses(user=user, title=title) 
      c.put() 

     self.redirect('/courses') 

意想不到的關鍵字參數是從Django模板創建實體沒有。任何幫助將非常感激。

回答

1

您正在定義Courses兩次。一旦作爲模型:

class Courses(db.Model): 
    user = db.StringProperty(required = True) 
    title = db.StringProperty(required = True) 
    created = db.DateTimeProperty(auto_now_add = True) 

而且作爲處理程序:

class Courses(Handler): 
    # code 

既然你第二界定的處理程序,這就是被存儲爲Courses在當前的命名空間。例如:

In [1]: class Courses(object): 
    ...:  a = 'First Courses' 
    ...:  
    ...:  

In [2]: class Courses(object): 
    ...:  a = 'Second Courses' 
    ...:  
    ...:  

In [3]: Courses.a 
Out[3]: 'Second Courses' 

我建議改變處理程序的名稱,這樣你就不會得到你現在所得到的衝突(如果當你調用Courses(user=user),它正試圖調用處理程序,而不是模型)。

+0

修復它。非常感謝您的迅速回復。 – user1927856

+0

@ user1927856沒有問題,絕對是一個容易犯的錯誤。祝你一切順利! – RocketDonkey