Django 测试:类型不正确。预期 pk 值,收到 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='类型不正确。预期 pk 值,收到 str.', code='in Correct_type')]} 我如何在这本字典中传递这个对象。
感谢您的帮助。
I have a simple model having a foreign key:
class Job(models.Model):
resource = models.ForeignKey(Resource, on_delete=models.RESTRICT, related_name="resource_jobs")
required_resource = models.FloatField(default=0)
Here is the viewset:
class JobViewSet(ModelViewSet):
queryset = Job.objects.all()
serializer_class = JobSerializer
I am writing a test to create this Job object like this.
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)
Upon running the test I get an error:
{'resource': [ErrorDetail(string='Incorrect type. Expected pk value, received str.', code='incorrect_type')]}
How do I pass this object in this dictionary.
Thank you for any help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您永远不会通过序列化器传递模型对象:将序列化器序列化到 JSON、XML 等字符流。
您应该传递项目的主键,因此:
You never pass model objects through a serializer: a serializer serializer to a stream of characters like JSON, XML, etc.
You should pass the primary key of the item, so: