2013-04-22 106 views
0

错误GAE ReferencePropertyResolveError - 删除父实体

TemplateSyntaxError: Caught ReferencePropertyResolveError while rendering: ReferenceProperty failed to be resolved: [u'Image', 12345678L] 

模式

#ModelBase class extends from db.Model 

class Article(TaggableModel): 
    ... 
    image = db.ReferenceProperty(Image, collection_name='image_set') 
    image_blob = blobstore.BlobReferenceProperty() 

class BlobStoreImage(ModelBase): 
    ... 
    title = db.StringProperty() 
    alt = db.TextProperty(default="") 
    blobkey = blobstore.BlobReferenceProperty() 

class Image(ModelBase): 
    ... 
    title = db.StringProperty() 
    original = db.BlobProperty() 

据我了解,有可能指的是不存在的Imageid='12345678L'文章。但是,似乎是you can't query individual fields in app engine。看到这种情况,如何通过删除与不存在的图像关联的Article或使用上面的id创建图像来解决此错误。

我已经尝试过后者,并且服务器返回了200个代码,但也许我的语法错误。

回答

0

链接的问题是a)过时和b)与您的问题完全无关。当然,你可以通过ID查询一个单独的图像,这不是尼克在那里所说的(仅供参考)他说你不能做一个只提取单个字段而不是整个记录的查询,这在时间但实际上你现在可以通过使用projection queries)。

使用正常的DB查询语法,你可以简单地找到相关图片ID文章如下:

from google.appengine.ext import db 
image_key = db.Key.from_path(u'Image', 12345678L) 
article = Article.all().filter('image', image_key).get() 

如果这是混淆了你,你应该去阅读datastore query documentation,这是全面的。

+0

首先 - 感谢您的快速响应!一个注意事项:我不认为最后需要'''.get()'''。我还没有浏览完整的文档,但这是有道理的。如果由于某种原因,现场查询不可用,我会发现这很奇怪。 – snakesNbronies 2013-04-22 10:22:54

+1

的get或orvalent是必需的,其他明智的文章将被分配一个查询对象。然后你可以迭代这样一个对象,但是因为你想要一个效率低下且笨拙的单个实体。 – 2013-04-22 11:08:15