如何使用 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。
现在请求正常运行了!
所以,
我正在使用 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。
现在请求正常运行了!