Как отправить kwargs для формы MultipleChoiceField в модульном тесте POST представления
Я пытаюсь найти ответ для тестирования POST представления с данными. У меня есть форма, которая генерирует варианты выбора при инициализации, и проблема в моем тесте заключается в том, что я не передаю список_of_ids, необходимый для заполнения вариантов выбора для формы при инициализации, поэтому я получаю ошибку "12345 не является одним из доступных вариантов выбора."
Это означает, что мой код ответа выдает 200, так как форма не действительна, и тест не проходит. Я не могу найти правильный способ проверить это или как я должен передать варианты формы в тесте.
class AddAccountForm(forms.Form):
account_id = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices = [])
def __init__(self, *args, **kwargs):
self.list_of_ids = kwargs.pop('list_of_ids')
super(AddAccountForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_action = 'add_account_ids'
self.fields['account_id'].choices = [(id['account_id'],id['account_id']) for id in self.list_of_ids]
self.helper.layout = Layout(
'account_id',
Submit('submit', 'Add', css_class='btn btn-primary btn-sm ml-2'),
)
список_of_ids исходит из вызова api в моем представлении:
@login_required
def add_account_ids(request):
api_client = api_authentication(request.user)
list_of_ids = get_list__ids(api_client)
if request.method == "POST":
form = AddAccountForm(request.POST, list_of_ids=list_of_ids)
print(request.POST)
if form.is_valid():
for id in form.cleaned_data['account_id']:
LinkedAccount.objects.create(
account_id=id, social_provider="api", user=request.user
)
return HttpResponseRedirect('/')
else:
print('test')
form = AddAccountForm(list_of_ids=list_of_ids)
context = {'form' : form}
return render(request, "account_management/add_account.html", context)
и мой тест:
def test_add_id_POST_with_data(client, django_user_model):
username = "user1"
password = "bar"
django_user_model.objects.create_user(username=username, password=password)
client.login(username=username, password=password)
list_of_ids = [{'account_id': '12345'}, {'account_id': '67890'}, {'account_id': '11121'}]
form_data = {
'account_id':['12345'],
}
response = client.post('/add_account_ids', form_data, follow=True)
form_e = response.context['form']
print(form_e.errors)
assert response.status_code == 201
assert LinkedAccount.objects.get(slug = 'api-12345').exists() == True