したがって、ActoretsとRoleというモデルと、ViewsetsとHyperlinkedModelSerializerを使用するデフォルトのREST APIがあります。Django RESTフレームワーク:ユニットテストでHyperlinkedModelSerializerのURLフィールドを正しく使用する方法
私の目標:関連するアクタとロールを作成する単体テスト。
私のテストコードは、現在、次のとおりです。
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:シリアライザの文脈における要求が廃止されました を含めずに
HyperlinkedIdentityField
を使用して実際に、私は非推奨警告が表示されます。シリアライザをインスタンス化するときにcontext={'request': request}
を追加します。
しかし、シリアライザによって生成された "url"フィールドは、どのリクエストとも無関係のようです。このフィールドを取得する適切な方法は何ですか?私はコンセプトが欠けていると感じています。または2つ。
TIA!ユニットテストのpreperationで
URLを絶対に変換できるようにリクエストを渡す必要があります。参照してくださいhttp://django-rest-framework.org/api-guide/reverse –