Quindi ho i modelli Actor e Role e un'API REST predefinita che utilizza Viewsets e HyperlinkedModelSerializer.Django REST Framework: come utilizzare correttamente il campo url HyperlinkedModelSerializer nei test unitari
Il mio obiettivo: un test unitario che crea un ruolo con un attore associato.
mio codice di prova è attualmente:
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())
Ora, questo sembra molto brutto per me, soprattutto la serializzazione per recuperare il campo URL generato. In realtà, ho ricevuto un avviso di disapprovazione:
DeprecationWarning: Usando
HyperlinkedIdentityField
senza includere la richiesta nel contesto serializzatore è deprecato. Aggiungicontext={'request': request}
durante l'istanziazione del serializzatore.
Ma il campo "url" generato dal serializzatore sembra non correlato a nessuna richiesta. Qual è il modo corretto per recuperare questo campo? Sento che mi manca un concetto qui. O due.
TIA!
È necessario passare la richiesta in modo che l'URL possa essere convertito in assoluto. Vedi Vedi http://django-rest-framework.org/api-guide/reverse –