一个意外的关键字参数python

时间:2017-02-17 11:26:21

标签: python html webapp2

我正在尝试实现一个简单的功能来喜欢帖子。 我有4个使用Google App Engine定义的模型;用户,Blogpost,喜欢,评论

以下是片段:

class LikePost(db.Model):
    user        = db.ReferenceProperty(User)
    blogpost    = db.ReferenceProperty(Blogpost)
    date        = db.DateTimeProperty(auto_now_add = True)

class Comment(db.Model):
    user        = db.ReferenceProperty(User)
    blogpost    = db.ReferenceProperty(Blogpost)
    content     = db.TextProperty(required = True)
    date        = db.DateTimeProperty(auto_now_add = True)

我尝试使用以下方法调用该方法:

class LikePost(Handler):
    def get(self,post_id):
        blogpost = self.get_blogpost(post_id)
        user = self.get_user_object()
        if blogpost and user:
            like = LikePost(user = user, blogpost = blogpost)
            like.put()
            self.redirect('/%s' % post_id)
        else:
            self.redirect('/login')

该方法的参考如下:

def get_user_object(self):
        cookie = self.request.cookies.get('user_id')
        if cookie:
            user_id = check_secure_val(cookie)

            if user_id:
                user_id = cookie.split('|')[0]
                key = db.Key.from_path('User', int(user_id))
                user = db.get(key)
                return user

def get_blogpost(self,post_id):        key = db.Key.from_path('Blogpost',int(post_id))        blogpost = db.get(key)        返回博文

尝试运行上述内容时出错:

__init__() got an unexpected keyword argument 'blogpost'

任何人都可以解释出了什么问题?

1 个答案:

答案 0 :(得分:0)

您已将模型定义为

class LikePost(db.Model):

然后你已经定义了你的处理程序

class LikePost(Handler):

请注意,它们具有相同的名称。所以在你的get方法中,你的Handler子类的范围是什么,显然不希望它的__init__方法有一个blogpost关键字参数。最简单的解决方案,重命名其中一个或

 from models import LikePost as LP

并使用