繁体   English   中英

在Django测试中传递参数

[英]Pass arguments in django test

我试图将user.idsample.idsample.id给视图中的函数。

这是我的urls.py(URL只接受sample.id

path('<int:tag>', views.task, name='task'),

这是我的views.py(views.py正在寻找user.id但找不到它)

def task(request, tag):
    task_user = get_object_or_404(Team, id=tag)

    task_user.assigned_to = ProjectUser.objects.get(id=request.POST.get('user_id'))
    task_user.save()
return HttpResponseRedirect(reverse('someOtherPage'))

这是我的html模板

<form method='POST' action="{% url 'task' object.id %}">
    {% csrf_token %}
    <label for="select1"></label>
    <select name="user_id" class="mdb-select md-form" id="select1" onChange="form.submit();">
        {% for user in usernames %}
            <option value="{{ user.id }}"> {{ user }} </option>
        {% endfor %}
    </select>
</form>

这是我的tests.py

def someTest(self):

    self.client.login(username='jack', password='123')
    user1 = auth.get_user(self.client)
    assert user1.is_authenticated

    sample = Team.objects.create(sampleField='SampleName')

    request = self.client.post(reverse('analyst_view_app:task_analyst', kwargs={'tag': sample.id}))

错误消息是:

SomeApp.SomeModel.ProjectUser.DoesNotExist:不存在ProjectUser匹配查询。

如何将user1.id传递给功能task -> user_id

您没有在测试中传递任何POST数据。 您需要发送一个代表表单数据的字典,作为对client.post()调用的第二个参数。

request = self.client.post(
    reverse('analyst_view_app:task_analyst', kwargs={'tag': sample.id}),
    {'user_id': user1.id}
)

(但是请注意,如果您的视图应该总是吸引登录用户,则选择框中似乎根本没有任何意义。如果没有,那么您应该更改测试;也许您不会需要在那里登录吗?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM