Передать аргументы в тесте Django - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь передать функции user.id и sample.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>

Вот мои тесты.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?

1 Ответ

2 голосов
/ 27 апреля 2019

Вы не передаете данные POST в своем тесте. Вам необходимо отправить словарь, представляющий данные из формы, в качестве второго аргумента для вызова client.post().

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

(Обратите внимание, что если ваш взгляд должен всегда получать зарегистрированного пользователя, в поле выбора вообще нет никакой точки. Если нет, то вам следует изменить тест; возможно, вы там вообще не надо заходить?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...