Как отправить 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
Вернуться на верх