2010-07-07 78 views
1

我有一个2类。
一个看起来是这样的:谷歌应用程序引擎(Python)混淆类'对象没有属性'错误

class Feed(db.Model): 
    bid = db.StringProperty() 
    title = db.StringProperty() 
    url = db.StringProperty() 
    datecreated = db.DateProperty(auto_now_add=True) 
    voice = db.StringProperty() 
    lastchecked = db.DateProperty(auto_now=True) 
    language = db.StringProperty() 
    active = db.BooleanProperty() 
    posts = db.ListProperty(db.Key) 

其他看起来像这样:

class Post(db.Model): 
    title = db.StringProperty() 
    postdate = db.DateTimeProperty() 
    author = db.StringProperty() 
    body = db.TextProperty() 
    link = db.LinkProperty() 
    hasmp3 = db.BooleanProperty() 
    mp3location = db.StringProperty() 
    processed = db.BooleanProperty() 
    voice = db.StringProperty() 
    length = db.FloatProperty() 
    inprocess = db.BooleanProperty() 
    haspict = db.BooleanProperty() 
    pictures = db.ListProperty(db.Key) 

我试图通过附加一个帖子这样更新供稿:

blogid = cgi.escape(self.request.get('bid')) 
postid = cgi.escape(self.request.get('pid')) 

blog = Feed.get_by_key_name(blogid) 
post = Post.get_by_key_name(postid) 

if post.key() not in blog.posts: 
    blog.posts.append(post.key()) 
    blog.put() 

当我试图“贴”博客的帖子信息,蟒蛇不喜欢它,并告诉我

AttributeError: 'Feed' object has no attribute 'posts' 

我之所以如此困惑的原因是因为我几乎将'Feed'添加到'UserClass',其中'UserClass'将'Feed'指定为ListProperty的准确逻辑与' Feed'将'Post'指定为ListProperty。

这是我的意思的例子:

class UserClass(db.Model): 
    synccode = db.StringProperty() 
    firstname = db.StringProperty() 
    lastname = db.StringProperty() 
    address = db.StringProperty() 
    address2 = db.StringProperty() 
    city = db.StringProperty() 
    state = db.StringProperty() 
    zipcode = db.StringProperty() 
    emailaddress = db.StringProperty() 
    password = db.StringProperty() 
    mobile = db.StringProperty() 
    is_authenticated = db.BooleanProperty() 
    groupid = db.StringProperty() 
    mobilesynched = db.BooleanProperty() 
    devicemodel = db.StringProperty() 
    isatmoscast = db.BooleanProperty() 
    registerdate = db.DateProperty(auto_now_add=True) 
    pack = db.StringProperty() 
    personalcontact = db.BooleanProperty() 
    lastlogin = db.DateProperty(auto_now_add=True) 
    isactive = db.BooleanProperty() 
    feeds = db.ListProperty(db.Key) 

这工作得很好:

if blog.key() not in user.feeds: 
    user.feeds.append(blog.key()) 
    user.put() 

这引发错误:

if post.key() not in blog.posts: 
    blog.posts.append(post.key()) 
    blog.put() 

任何帮助,将不胜感激。

+0

你的ListProperty被称为“posts”,而不是“postids “ – geoffspear 2010-07-07 22:42:59

+1

谢谢。这是我玩弄我认为可能是保留名称的一个错字,但那不是问题。我已经更新了代码。 – 2010-07-07 22:49:32

+0

你仍然错过了这个错误。 – 2010-07-07 22:51:06

回答

5

我在“hello world”main.py中粘贴了模型;然后在本地SDK运行它,我在交互式控制台上输入:

import main as m 

p = m.Post() 
p.put() 
f = m.Feed() 
f.put() 

if p.key() not in f.posts: 
    f.posts.append(p.key()) 
    f.put() 

print f.posts 

,我看到,正如预期,在结果窗口向右:

[datastore_types.Key.from_path(u'Post', 7, _app=u'helow')] 

换句话说,它似乎无法重现您在简单情况下报告的问题。

请一个showstheproblem.py尽可能简单(即没有代码,这不是必不可少重现该问题!),这说明了什么问题,并编辑您的问题添加代码(减去模型,我们”我已经看到了这些,当然绝大多数领域与这个问题完全无关)。

这总是报告可疑错误或获得帮助的正确方法;通常情况下,您会发现在削减代码副本以获得“最小可能的问题再现”的过程中,问题会以一种方式消失,以显示您发生了什么问题你的代码放在第一位 - 所以你甚至不需要寻求关于或报告库中不存在的错误的帮助 - )

相关问题