2013-12-16 6 views
5

düzgün şekilde nasıl kullanacağım? Bu nedenle, Aktörler ve Rol ve Viewsets ve HyperlinkedModelSerializer kullanarak varsayılan bir REST API'sine sahip modellerim var.Django REST Framework: HyperlinkedModelSerializer url alanını birim sınamalarında

Amacım: İlişkilendirilmiş bir Oyuncu ile Rol oluşturan bir birim testi.

Testim kodu şu anda:

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()) 

Şimdi bu bana oluşturulan URL alanını almak için özellikle seri çok çirkin görünüyor.

DeprecationWarning: serileştirici bağlamında istek kullanımdan kaldırılmıştır içermeden HyperlinkedIdentityField kullanma Aslında, bir kullanımdan kaldırılması uyarısı alıyor. Diziselleştiriciyi başlatırken context={'request': request}'u ekleyin.

Ancak, seri hale getirici tarafından oluşturulan "url" alanı herhangi bir istekle ilgili görünmüyor. Bu alanı getirmenin uygun yolu nedir? Burada bir kavram kaçırdığımı hissediyorum. Ya da iki.

TIA! Eğer url tanımlayıcı olarak kullanmak Sonra

actor = ActorFactory() 
actor.save() 

aktörün kimliği kullanarak url almak için Django reverse yöntemini kullanın ya da her türlü alan:

birim testinin Sayfanın başına
+3

URL'yi mutlak olarak dönüştürülebilmek için isteği iletmeniz gerekiyor. Bkz. Http://django-rest-framework.org/api-guide/reverse –

cevap

5

, ilk aktör eklemek istiyorum :

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

nasıl url size kaynak kurdum bağlıdır ters, ama mümkün olmalıdır.

+2

Buradaki fikir, serileştirilmiş URL'nin, onu oluşturan isteklere bağlı olmaması gerektiğidir. Bu nedenle, geri kalan çerçeve, URL'leri mutlak ve göreli olmayan yapma isteğini kullanır. –