2013-05-09 9 views
24

sto cercando di utilizzare RequestFactory per testare un detailview con il seguente test case:Come posso passare un PK o una lumaca a un DetailView utilizzando RequestFactory in Django?

def test_device_homepage(self): 
    request = self.factory.get('/devices/1/', {'pk': 1}) 

    response = DeviceView.as_view()(request) 

    self.assertEqual(response.status_code, 404) 

Quando eseguo la prova di cui sopra, tuttavia, ottengo il seguente messaggio di errore:

AttributeError: Generic detail view DeviceView must be called with either an object pk or a slug. 

Se posso stampare la richiesta dopo la creazione, posso vedere il seguente:

<WSGIRequest 
path:/devices/1/, 
GET:<QueryDict: {u'pk': [u'1']}>, 

Per quanto posso dire, che dovrebbe essere tutto ciò che la req detailview vuole essere in grado di avanzare oltre il punto nel codice che sta generando il messaggio di errore sopra.

Per completezza traceback completo è qui sotto:

Traceback (most recent call last): 
File "/vagrant/devices/tests/test_views.py", line 17, in test_device_homepage 
response = DeviceView.as_view()(request) 
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py", line 68, in view 
return self.dispatch(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py", line 86, in dispatch 
return handler(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/detail.py", line 108, in get 
self.object = self.get_object() 
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/detail.py", line 48, in get_object 
% self.__class__.__name__) 

risposta

49

Grazie al canale #django su Freenode IRC, ho trovato il seguente metodo è quello corretto per passare parametri tutto il percorso attraverso la visualizzazione:

response = DeviceView.as_view()(request, pk=1) 

spero che questo aiuta qualcun altro tenta di utilizzare RequestFactory per testare detailview o DeleteView ecc

+0

Grazie per questo, funziona bene! – Matt

+0

Grazie .. questo funziona come un incanto! – user01

Problemi correlati