【问题标题】:How to handle and test Mongoengine objects with ReferenceField?如何使用 ReferenceField 处理和测试 Mongoengine 对象?
【发布时间】:2015-03-12 18:52:16
【问题描述】:

所以,

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

我有一个“Praia”模型,它有一个“atividades”参考字段。

当我通过时

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'}

我该怎么办?

【问题讨论】:

  • 我已经通过 Postman 向我的 API 发送了一个请求,这正在工作!我的测试中的问题是来自棉花糖的嵌套字段的字典的 id 列表...

标签: python json flask mongoengine


【解决方案1】:

我找到了答案!

我只是更改了为 post 请求装载 json 数据的方式。

我使用的不是我的 Serializer 或 json.dumps(Model):

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

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

现在请求可以正常工作了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多