我有一个 ToDo App Django 项目,因此存在与 ManyToMany 关系链接的 Task 和 TaskList 模型。 在我的 TaskSerializer 中,我定义了一个嵌套的 TaskListSerializer,它处理任务的任务列表的反向关系。 现实世界中一切都很顺利,序列化和反序列化也没问题。
这是您在更新任务时应该发出的请求(作为 json):
{
"title": "hello",
"tasklists": [
{"pk": "b84d3375-0e09-4dd1-9809-f92d29d6aa36"},
{"pk": "b84d3375-0e09-4dd1-9809-f92d29d6aa36"}
]
}
但是在测试中,我想测试这个序列化器,并且当我发送放置请求时,任务列表字段不会发送到视图!
这是测试请求:
path = self.task.get_absolute_api_url()
data = {
"title": "hello",
"tasklists": [
{"pk": "b84d3375-0e09-4dd1-9809-f92d29d6aa36"},
{"pk": "b84d3375-0e09-4dd1-9809-f92d29d6aa36"}
]
}
self.client.put(path, data)
但是视图的validated_data和initial_data内部没有tasklists字段。(标题字段已发送并验证)
我猜想 Renderer 和 json_encoder 对于这种类型的数据有问题。
那么正确的请求数据应该如何包含在嵌套序列化器测试中?
一般来说,如何测试嵌套序列化器!
在 Django 中测试嵌套序列化器可能有点棘手,尤其是在处理 ManyToMany 关系时。要测试嵌套序列化器,您应该确保在测试请求中发送的数据格式正确,以符合序列化器的期望。
以下是修改测试请求数据以确保正确处理嵌套序列化器的方法:
path = self.task.get_absolute_api_url()
data = {
"title": "hello",
"tasklists": [
{"pk": "b84d3375-0e09-4dd1-9809-f92d29d6aa36"},
{"pk": "b84d3375-0e09-4dd1-9809-f92d29d6aa36"}
]
}
# Convert the data to JSON since the Django test client sends JSON by default
json_data = json.dumps(data)
# Make the PUT request with the JSON data
self.client.put(path, json_data, content_type='application/json')
通过使用
json.dumps
将数据转换为 JSON 并在 'application/json'
方法中将内容类型指定为 put
,可以确保数据以正确的格式发送给序列化器。
此外,在测试嵌套序列化器时,请确保您发送的数据正确并且遵循序列化器期望的结构。在您的情况下,
tasklists
字典中的 data
字段应与嵌套序列化器所需的结构匹配,该结构是带有键 "pk"
的字典列表。
如果问题仍然存在,您可能需要检查视图和序列化器代码,以确保正确定义嵌套序列化器并按预期处理数据。您还可以打印或记录测试期间视图中收到的
data
,以检查正在接收和处理的内容。
请记住,测试嵌套序列化器涉及确保测试请求中发送的数据格式正确,并且在序列化器和视图中正确处理嵌套关系。