如何使用 ReferenceField 处理和测试 Mongoengine 对象?

How to handle and test Mongoengine objects with ReferenceField?

所以,

我正在使用 Flask-RESTful、MongoEngine 和 marshmallow 编写 REST Api,我在测试具有 ReferenceFields 的模型时遇到了一些问题。

我有一个 "Praia" 模型,它有一个 "atividades" ReferenceField。

当我通过时

class PraiasSerializer(Schema):
  id = fields.String()
  atividades = fields.Nested(AtividadesSerializer, many=True)

  class Meta:
    additional = ('nome', 'descricao')

model = {'nome': 'nome', 'descricao': 'descricao',
          atividades: [ativ1.id, ativ2.id]}
praia = Praias(**model)
data = PraiasSerializer(praia).data
data.pop('id')
self.client.post('/v1/praias', data=data,
                 content_type='application/json')

即使使用这个 data.pop('id') 让我的模型不发送 'id' 到我的控制器我收到一个 TypeError: add_file() got an unexpected keyword argument 'id'

当我打印这个数据变量时,我得到以下输出:

{u'atividades': [{u'id': u'5501dee0e13823649320299d'}, {u'id': u'5501dee0e13823649320299c'}], u'descricao': u'Portao e sucesso!', u'nome': u'Porto da Barra'}

我该怎么办?

我找到答案了!

我刚刚更改了为 post 请求加载 json 数据的方式。

我没有使用我的序列化程序或 json.dumps(模型),而是使用:

model = {'nome': 'nome', 'descricao': 'descricao',
          atividades: [str(ativ1['id']), str(ativ2['id'])]}
data = json.dumps(model)

我对 id 进行了强制转换,因为 Python 不知道如何 JSON 序列化 ObjectId。

现在请求正常运行了!