2013-06-30 5 views
1

Я использую mongodb и колбу. У меня есть следующие модели:Как получить доступ к атрибуту из поля списка

class Post(db.Document): 
    properties = db.ListField(db.EmbeddedDocumentField('Properties')) 


class Properties(db.EmbeddedDocument): 
    title = db.StringField(max_length=255, required=True) 
    types = db.StringField(max_length=255, required=True) 
    location_name = db.StringField(max_length=255, required=True) 
    url = db.StringField(max_length=255, required=True) 
    feed_url = db.StringField(max_length=255, required=True) 
    content_url = db.StringField(max_length=255, required=True) 
    date_added = db.StringField(max_length=255, required=True) 
    date_crawled = db.StringField(max_length=255, required=True) 

Когда я сделать Post.properties я получаю возвращенное поле списка. Мне было интересно, знает ли кто-нибудь, как получить доступ к атрибуту url в классе свойств. Предпочтительно я хочу, чтобы получить ListField где properties.url равно, например, «ABC»

Я попытался Post.properties.url и я получаю следующую ошибку

AttributeError: 'ListField' object has no attribute 'url' 

Большое спасибо

ответ

1

Post.properties имеет ListField тип , Таким образом, для Post экземпляр properties имеет list тип.

Сначала вы должны получить Post экземпляр (не класс):

post_1 = Post.objects.first() # get first from database 
post_2 = Post().save() # create and save 

С Post Например, вы можете получить Собственость индексом:

post = Post.objects.first() 
print post.properties[0].url if post.properties else None 

Но лучше итерации по свойствам:

post = Post.objects.first() 
for property in post.properties: 
    print property.url 

Также смотрите mongoengine tutorial и user guide.

+0

Спасибо, что все объекты из базы данных я просто делаю Post.objects. Я могу найти, где все эти методы, которые я могу назвать, находятся в документации. – Kimmy