Python 中的循环引用问题:
我得到了:
ImportError: cannot import name Image (from image_blob.py)
请帮帮我,谢谢 :s
我的代码:
image.py:
from google.appengine.ext import db
from app.models.item import Item
class Image(Item):
# imports
from app.models.image_blob import ImageBlob
#from app.models.user import User
#from list_user import ListUser # is needed in order to have the references
# references
#uploaded_by_user = db.ReferenceProperty(User, required = True)
large_image = db.ReferenceProperty(ImageBlob, required = True)
small_image = db.ReferenceProperty(ImageBlob, required = True)
# image info
title = db.StringProperty(required = True)
description = db.StringProperty(required = False)
# metadata
# relations
image_blob:
from google.appengine.ext import db
class ImageBlob(db.Model):
from app.models.image import Image
data = db.BlobProperty(required = True)
image = db.ReferenceProperty(Image, required = True)
1 个回答
2
你在尝试从 image_blob.py
导入内容,但这时候 image.py
还没有完全处理完。在执行 from app.models.item import Item
的时候,class Image
还没有被定义,所以你无法导入它(整个类的定义必须先处理完,才能真正使用这个符号)。
解决这个问题的方法很简单:不要在 ImageBlob
上定义 image
属性。AppEngine 的模型会自动为你创建一个反向引用,所以当你把 ImageBlob
加入到 Image
中时,它会自动在 ImageBlob
上定义一个属性,这个属性会指向所有引用它的 Image
(在你当前的使用情况下,这个数量应该是1)。