2013-06-29 72 views
1

我正在使用MongoDB和Flask。在我的模型,我有以下幾點:如何檢索文檔的嵌套列表

class Post(db.Document): 
    types = db.StringField(max_length=255, required=True, default="Feature") 
    geometry = db.ListField(db.EmbeddedDocumentField('Geometry')) 
    properties = db.ListField(db.EmbeddedDocumentField('Properties')) 

class Geometry(db.EmbeddedDocument): 
    types = db.StringField(default="Point",required=True) 
    coordinates = db.ListField(db.EmbeddedDocumentField('Coordinates')) 

class Coordinates(db.EmbeddedDocument): 
    longitude = db.StringField(max_length=255) 
    latitude = db.StringField(max_length=255) 

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.objects.get_or_404(title=title) 

檢索一切從類崗位。

我的問題是:有沒有人知道如何檢索listfield屬性並獲取url的值?

我需要這個,因爲我試圖重新填充表單,以便當用戶按下「編輯」時,它將顯示用戶以前在窗體中添加的內容。

當我嘗試:

Properties.objects.get_or_404(url=url) 

它給了我AttributeError: type object 'Properties' has no attribute 'objects'

回答

0

您使用EmbeddedDocument所以它只是Post模型和EmbeddedDocument的路徑沒有object屬性格式,因爲它只是Document路徑DictField

要查找Post其中properties.url == url使用下面的代碼:

Post.objects.get_or_404(title=title, properties__url=url) 

但你會得到Post實體,必須找到特定的屬性manualy。例如:

class Post(db.Document): 
    def get_property_by_url(self, url): 
     for property in self.properties: 
      if property.url == url: 
       return property 
     abort(404)