使用MongoEngine获取集合中所有文档中的所有嵌入式文档

时间:2017-08-19 11:47:06

标签: django-rest-framework mongoengine embedded-documents restframeworkmongoengine

我已尝试在网上搜索此内容,但似乎无法找到任何内容(抱歉,如果这是在某处)。

我使用Mongoengine和Django并拥有以下模型:

class Event(EmbeddedDocument):
    tagged_event = StringField(max_length=255)
    example_event = StringField(max_length=255)
    severity = StringField(max_length=4)
    created_by = StringField(max_length=255)
    created_on = DateTimeField()
    modified_by = StringField(max_length=255)
    modified_on = DateTimeField()

class Definition(Document):
    title = StringField(max_length=255)
    description = StringField(max_length=255)
    resolution = StringField(max_length=255)
    events = ListField(EmbeddedDocumentField(Event))
    created_by = StringField(max_length=255)
    created_on = DateTimeField()
    modified_by = StringField(max_length=255)

我想做的是回复每一个"事件"在定义的集合中,而不是"定义"在视图中。

有什么想法吗?

非常感谢!

**** **** UPDATE

我找到了一个解决方法:

我在Django中将事件创建为一个单独的应用程序,并将ReferenceField设置为来自其他应用程序的导入的定义。

在EventView中,我设置了使用定义ID的参考字段。

class Event(Document):
    tagged_event = StringField(max_length=255)
    example_event = StringField(max_length=255)
    severity = StringField(max_length=4)
    definition = ReferenceField(Definition)
    created_by = StringField(max_length=255)
    created_on = DateTimeField()
    modified_by = StringField(max_length=255)
    modified_on = DateTimeField()

views.py

def post(self, request):
    serializer = EventSerializer(data=request.data)
    if not serializer.is_valid():
        return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)
    else:
        data = serializer.data
        date = datetime.datetime.now()
        Event.objects.create(tagged_event=data['tagged_event'], example_event=data['example_event'], severity=data['severity'], definition=data['definition'], created_by=data['created_by'], created_on=date, modified_by=data['modified_by'], modified_on=date)
        return Response(serializer.data, status=status.HTTP_201_CREATED)

虽然我仍然想知道是否可以过滤掉所有文件中的所有嵌入文件。

0 个答案:

没有答案