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

发布于 2025-01-14 05:11:52 字数 946 浏览 2 评论 0原文

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜嗑 2025-01-21 05:11:52

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

您应该传递项目的主键,因此:

self.job_data = {
    'resource': self.resource,pk,
    'required_resource': 20,
}

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:

self.job_data = {
    'resource': self.resource,pk,
    'required_resource': 20,
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文