2013-01-23 100 views
1

我需要在Mongoengine中使用雙向關係,如下所示。mongoengine中的雙向關係

from mongoengine import * 

class Notification(Document): 
    desc = StringField() 
    from_user = ReferenceField('User') 

class User(Document): 
    Name = StringField() 
    notifications = ListField(EmbeddedDocumentField(Notification)) 

我知道當類還沒有定義的時候,我們可以把單引號的類名放在那裏。

from_user = ReferenceField('User') 

但是,我們在這裏遇到了問題。看起來像在運行時它將我們的類解釋爲mongoengine.django.auth.user而不是我們的自定義用戶類。 (這只是我的猜測,但在調試模式下運行時,我發現它將其誤解爲mongoengine.django.auth.user,儘管集合中的記錄應該屬於自定義用戶類)

那麼有沒有什麼辦法我要在那裏指定一個完全合格的類名?

謝謝!

+0

好了之後,我已經扭轉了秩序,那麼它的作品!所以我先定義了User類,然後定義了Notification類。所以我可以從Notification類引用User類。但仍然想知道是否有任何方法在python中指定具有完全限定名稱的類。謝謝! – Chris

回答

0

在這個例子中,你需要在Notification類後聲明User類。

內部mongoengine使用類註冊表,它通過Document元類填充。不幸的是,命名空間與java世界不一樣(我從來沒有想過我會這麼說!),據我所知,它不可能確定一個類的完整位置名稱,例如:myapp.models.User

你使用的是django用戶類嗎?以及另一個用戶類 - 這將導致註冊表問題,因爲目前每個名稱只能有一個類。