1

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テンプレートからではなくエンティティを作成することによるものです。どんな助けでも大歓迎です。

4

1 に答える 1

1

あなたはCourses2回定義しています。モデルとして一度:

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

ハンドラーを2番目に定義するので、それが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)に、モデルではなくハンドラーを呼び出そうとします)。

于 2013-01-01T21:56:33.913 に答える