gpt4 book ai didi

python - Django REST框架: how to properly use the HyperlinkedModelSerializer url field in unit tests

转载 作者:行者123 更新时间:2023-12-02 04:53:15 25 4
gpt4 key购买 nike

所以我有模型 Actor 和 Role 以及使用 View 集和 HyperlinkedModelSerializer 的默认 REST API。

我的目标:创建具有关联 Actor 的角色的单元测试。

我的测试代码当前是:

def test_post_create_role_for_actor(self):

# default actor
actor = ActorFactory()

# inherits HyperlinkedModelSerializer
actor_serialized = ActorSerializer(actor)

postdata = {
'role': 'mydummyrole',
'actor': actor_serialized.data['url']
}

ret = self.client.post(self.url, json.dumps(postdata), content_type='application/json')

self.assertEqual(ret.status_code, 201)
self.assertTrue(Role.objects.filter(role='mydummyrole', actor_id=actor.id).exists())

现在这对我来说看起来非常丑陋,尤其是检索生成的 url 字段的序列化。事实上,我收到了弃用警告:

DeprecationWarning: Using HyperlinkedIdentityField without including the request in the serializer context is deprecated. Add context={'request': request} when instantiating the serializer.

但是序列化器生成的“url”字段似乎与任何请求无关。获取该字段的正确方法是什么?我觉得我在这里缺少一个概念。或者两个。

蒂亚!

最佳答案

在准备单元测试时,我首先插入参与者:

actor = ActorFactory() 
actor.save()

然后使用 Django 的 reverse使用 Actor 的 id 或在 url 中用作标识符的任何字段来获取 url 的方法:

url = reverse('my_api.actor_resource', args={'id': actor.id})

如何反转 URL 取决于您如何设置资源,但这应该是可能的。

关于python - Django REST框架: how to properly use the HyperlinkedModelSerializer url field in unit tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20614787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com