Django 测试:类型不正确。预期 pk 值,收到 str

Django Test: Incorrect type. Expected pk value, received str

我有一个带有外键的简单模型:

class Job(models.Model):
    resource = models.ForeignKey(Resource, on_delete=models.RESTRICT, related_name="resource_jobs")
    required_resource = models.FloatField(default=0)

这是视图集:

class JobViewSet(ModelViewSet):
    queryset = Job.objects.all()
    serializer_class = JobSerializer

我正在编写一个测试来创建这样的 Job 对象。

self.detail_url: str = "factory:jobs-detail"

self.resource = Resource.objects.create(**self.resource_data)

self.job_data = {
    "resource": self.resource,
    "required_resource": 20,
}

def test_create(self) -> None:
    response: Response = self.client.post(
        self.list_url, data=self.job_data
    )
    print(response.data)
    self.assertEqual(response.status_code, 201)

在 运行 测试时我得到一个错误: {'resource': [ErrorDetail(string='Incorrect type. Expected pk value, received str.', code='incorrect_type')]} 我如何在这个字典中传递这个对象。

感谢您的帮助。

您永远不会通过序列化程序传递模型对象:序列化程序将序列化程序序列化为 JSON、XML 等字符流

你应该传递项目的主键,所以:

self.job_data = {
    'resource': <strong>self.resource,pk</strong>,
    'required_resource': 20,
}