Django-REST框架:如何在单元测试中正确使用hyperlinkedmodelserializerurl字段

2024-10-01 07:46:07 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我使用Viewsets和HyperlinkedModelSerializer对Actor和Role进行建模,并使用默认restapi。在

我的目标:一个单元测试,创建一个角色和一个相关的参与者。在

我的测试代码目前是:

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”字段似乎与任何请求无关。拿这块地的正确方法是什么?我觉得我遗漏了一个概念。一两个。在

蒂娅!在


Tags: theselfidjsonurlrequestpostserialized
1条回答
网友
1楼 · 发布于 2024-10-01 07:46:07

在准备单元测试时,我将首先插入actor:

actor = ActorFactory() 
actor.save()

然后使用Django的^{}方法通过使用参与者的id或url中用作标识符的任何字段来获取url:

^{pr2}$

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

相关问题 更多 >