2017-02-09 2 views
0

Je souhaite tester l'ajout d'un formulaire de fichier de document personnalisé dans mon application dans le panneau d'administration. Malheureusement, la documentation django est assez obscure à propos de celle-ci.Test du formulaire d'administration Django

Ceci est mon modèle:

class Document(models.Model): 
    pub_date = models.DateTimeField('date published') 
    title = models.CharField(max_length=255) 
    description = models.TextField() 
    pdf_doc = models.FileField(upload_to=repo_dir, max_length=255) 

Ceci est mon test:

from django.test import TestCase 
from django.test import Client 
from django.utils import timezone 
from datetime import datetime, timedelta 

class DocumentAdminFormTest(TestCase): 

    def test_add_document_form(self): 
     client = Client() 
     change_url = 'admin/docrepo/document/add/' 
     today = datetime.today() 
     filepath = u'/filepath/to/some/pdf/' 
     data = {'title': 'TEST TITLE', 
       'description': 'TEST DESCRIPTION', 
       'pub_date0': '2000-01-01', 
       'pub_date1': '00:00:00', 
       'pdf_doc': filepath, 
       } 
     response = client.post(change_url, data) 
     print('REASON PHRASE: ' + response.reason_phrase) 
     self.assertIs(response.status_code, 200) 

Je voudrais obtenir 200 réponse tout en affichant le formulaire avec les données présentées. Pour une raison quelconque, response.status_code donne 404 et response.reason_phrase donne 'Not Found'. Est-il possible que le problème réside dans le répertoire?

+1

Habituellement, l'URL commence par une barre oblique. –

+0

Ok, ça m'a poussé un peu plus loin ... maintenant response.status_code renvoie 304 et response.reason_phrase donne 'Found'. Est-ce possible en raison de l'absence d'une étape de connexion? – asdfgh

Répondre

0

Vous avez à log the client in:

c = Client() 
c.login(username='your_username', password='your_password') 
response = c.post(change_url, data) 

La façon la plus correcte de définir change_url utilise reverse(). Vous pouvez browse the docs pour trouver la bonne façon de faire cela. Par exemple:

change_url = reverse('admin:docrepo_document_add')