0

这是我的models.py

from mongoengine import *

class Venue(Document):
    location_id     =   StringField(required=True)
    name            =   StringField(required=True)
    latitude        =   FloatField(required=True)
    longitude       =   FloatField(required=True)
    address         =   StringField()
    postal_code     =   StringField()
    city            =   StringField()
    county          =   StringField()
    country_code    =   StringField()
    events          =   ListField()

    class Event(Document):
        title           =   StringField(required=True)
        description     =   StringField(required=True)
        website         =   StringField()
        start_date      =   DateTimeField(required=True)
        start_time      =   DateTimeField(required=True)
        end_date        =   DateTimeField(required=True)
        end_time        =   DateTimeField(required=True)

显然每一个Venue都有很多Event

假设目标基于字段,我如何将Event模型推送到模型列表末尾的 mongodbevents中?Venuelocation_id

例如在 pymongo 我会使用:

db.venue.update({ 'location_id': id },
        { '$addToSet' :{ 'events' : {   'title': title,
                                        'website' : website,
                                        'description' : description,
                                        'start_date' : start_date,
                                        'start_time' : start_time,
                                        'end_date' : end_date,
                                        'end_time' : end_time
                                    }   
                        }
    })

如果您有更优化的结构,请随时提出建议。

4

1 回答 1

0

也许使用一个ReferenceField内部ListField

class Venue(Document):
    location_id = StringField(required=True)
    name = StringField(required=True)
    latitude = FloatField(required=True)
    longitude = FloatField(required=True)
    address = StringField()
    postal_code = StringField()
    city = StringField()
    county = StringField()
    country_code = StringField()
    events = ListField(ReferenceField('Event'), default=[])

class Event(Document):
    title = StringField(required=True)
    description = StringField(required=True)
    website = StringField()
    start_date = DateTimeField(required=True)
    start_time = DateTimeField(required=True)
    end_date = DateTimeField(required=True)
    end_time = DateTimeField(required=True)

然后就可以Venue().events.append(Event())帮忙了?

PS请不要在周围使用多个空格=

于 2013-10-08T13:13:30.200 回答