2010-10-31 4 views
1

je reçois:problème Python avec référence circulaire:

ImportError: cannot import name Image (from image_blob.py) 

s'il vous plaît aidez-moi grâce: s

mon code:

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) 
+0

Dupe: http://stackoverflow.com/questions/4016047/recursive-problem – adw

Répondre

2

Vous essayez d'importer à partir image_blob.py avant que l'intégralité de image.py est traitée. Au moment où le from app.models.item import Item se produit, class Image n'a pas encore été défini et ne peut donc pas encore être importé (la définition de classe entière doit avoir été traitée avant que le symbole ne soit réellement défini). Il existe une solution simple à ceci: Ne définissez pas la propriété image sur ImageBlob. Les modèles AppEngine automatiquement définissent une référence vers l'arrière pour vous, ainsi lorsque vous ajoutez le ImageBlob au Image, il définit automatiquement une propriété sur le ImageBlob qui renvoie à l'ensemble des Image s qui le référencent (ce qui, dans votre état actuel cas d'utilisation, devrait être de taille 1).

+0

La référence arrière est simplement une requête sur la propriété de référencement pour elle-même. Je suis d'accord pour ne pas créer de refs dans les deux sens. – kevpie

+0

merci! cela a résolu le problème! –

Questions connexes