Проблема Mongoengine ReferenceField

Я хочу создать поле ссылки, которое принимает тот же тип документа, что и тот, членом которого он будет, но он не работает, и я понятия не имею, как это решить. Я что-то забыл или надо сделать по другому?

import mongoengine as mongo

class AuthRequest(mongo.EmbeddedDocument):
    user_id = mongo.IntField(required=True, min_value=0)
    message = mongo.StringField(required=True, max_length=256)


class DatabaseUser(mongo.EmbeddedDocument):
    id = mongo.IntField(primary_key=True, min_value=0)
    name = mongo.StringField(required=True, unique=True, max_length=24)
    passw = mongo.StringField(required=True)
    mail = mongo.EmailField(required=True)
    last_online = mongo.DateTimeField()
    contact_field = mongo.ReferenceField('self',
                        reverse_delete_rule=mongo.NULLIFY)
    contacts = mongo.ListField(contact_field)
    requests = mongo.ListField(mongo.EmbeddedDocumentField(AuthRequest))


class UserCollection(mongo.Document):
    users = mongo.ListField(mongo.EmbeddedDocumentField(DatabaseUser))
    meta = {'collection': 'users'}

Это ошибка, которую я получаю при использовании «DatabaseUser»:

Traceback (most recent call last):
  File "path_to_my_script.py", line 206, in <module>
    class DatabaseUser(mongo.EmbeddedDocument):
  File "E:\Python27\lib\site-packages\mongoengine\base.py", line 401, in __new__
    field.document_type.register_delete_rule(new_class, field.name,
  File "E:\Python27\lib\site-packages\mongoengine\fields.py", line 605, in document_type
    self.document_type_obj = get_document(self.document_type_obj)
  File "E:\Python27\lib\site-packages\mongoengine\base.py", line 42, in get_document
    """.strip() % name)
mongoengine.base.NotRegistered: `DatabaseUser` has not been registered in the document registry.
            Importing the document class automatically registers it, has it
            been imported?

И это ошибка при использовании «я»:

Traceback (most recent call last):
  File "path_to_my_script.py", line 206, in <module>
    class DatabaseUser(mongo.EmbeddedDocument):
  File "E:\Python27\lib\site-packages\mongoengine\base.py", line 401, in __new__
    field.document_type.register_delete_rule(new_class, field.name,
AttributeError: type object 'DatabaseUser' has no attribute 'register_delete_rule'

Я использую Python 2.7.2 (64-разрядная версия) и Mongoengine v.5 в Windows 7 (64-разрядная версия).


person Brausebart    schedule 07.02.2012    source источник


Ответы (1)


В настоящее время поля ссылок поддерживают только ссылки на документы, а не встроенные документы.

person Ross    schedule 07.02.2012
comment
Очень жаль. Ну, тогда я должен сделать удаление ссылок самостоятельно. В любом случае, спасибо! - person Brausebart; 08.02.2012