【问题标题】:How to retrieve nested list for document如何检索文档的嵌套列表
【发布时间】:2013-06-29 18:03:18
【问题描述】:

我正在使用 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)

从课堂帖子中检索所有内容。

我的问题是:有谁知道如何检索列表字段属性并获取 url 的值?

我需要这个,因为我正在尝试重新填充表单,以便当用户按下“编辑”时,它将显示用户之前在表单中添加的内容的详细信息。

当我尝试时:

Properties.objects.get_or_404(url=url)

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

【问题讨论】:

    标签: python mongodb flask wtforms


    【解决方案1】:

    您使用了EmbeddedDocument,所以它只是Post 模型的路径,而EmbeddedDocument 没有object 属性,因为它只是Document 的路径DictField

    要找到Post 哪里properties.url == url 使用下一个代码:

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

    但是你会得到Post 实体并且必须手动找到特定的属性。例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-03
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多