测试 Django 管理表单

asd*_*fgh 3 python forms django admin

我想测试在管理面板的应用程序中添加自定义文档文件表单。不幸的是,django 文档对这一点非常模糊。

这是我的模型:

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)
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

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)
Run Code Online (Sandbox Code Playgroud)

我想在发布带有显示数据的表单时得到 200 响应。出于某种原因, response.status_code 给出 404, response.reason_phrase 给出“未找到”。问题可能出在目录上吗?

rar*_*iru 5

您必须登录客户端

c = Client()
c.login(username='your_username', password='your_password')
response = c.post(change_url, data)
Run Code Online (Sandbox Code Playgroud)

最正确的定义方法change_url是使用reverse(). 您可以浏览文档以找到执行此操作的正确方法。例如:

change_url = reverse('admin:docrepo_document_add')
Run Code Online (Sandbox Code Playgroud)