Как проверить форму Django с ModelChoiceField с помощью тестового клиента и метода post

Как использовать Django test client.post для проверки формы, имеющей ModelChoiceField? Как должен быть записан словарь данных, переданный методу post? То, как я поступаю, вообще не выбирает никакого значения.

У меня есть форма со следующим полем:

country = forms.ModelChoiceField(
        label="País",
        queryset=Country.objects.all().order_by('name'),
        required=True,
        widget=forms.Select(attrs={
            'onchange': "Dajaxice.party.update_country(Dajax.process, {'option':this.value})"
            },
        )

У меня также есть следующий тестовый пример:

def test_party_profile_sucessfully_saved(self):
    self.client.login(username='Party1', password='BadMotherF')
    response = self.client.post(reverse('party'), data={'slx_legal_type': '1', 'city':  'Belo Horizonte', 'country': '32',
                                        'mobile': '+55-31-55555555', 'name':    'Roberto Vasconcelos Novaes',
                                        'phone': '+55-31-55555555', 'slx_cnpj': '', 'slx_cpf': '056846515',
                                        'slx_ie': '', 'slx_im': '', 'slx_rg': 'MG9084545', 'street':
                                        'Rua Palmira, 656 - 502', 'streetbis': 'Serra', 'subdivision': '520',
                                        'zip': '30220110'},
                               follow=True)
    self.assertContains(response, 'Succesfully Saved!')

Эта форма работает хорошо. Но когда я тестирую его с использованием вышеупомянутого контрольного примера, выбор, переданный в качестве данных для поля выбора модели (Страна), не выбирается. Я пытался передать значение (32) и название страны ("Бразилия") или что-то еще.

2 ответа

Я думаю, вам нужно передать идентификатор страны или модель экземпляра.

Если у вас есть страна "Бразилия" с идентификатором 32, вы можете пройти в

{....
    'country' : 32
....}

или же

вы можете сначала получить страну с помощью

country = Country.objects.get(id=32)
{....
    'country': country
....}

Сам столкнулся с такой проблемой при решении задачи. При указании конкретных атрибутов, например, <ModelName>.objects.get(<attr>='<...>').<something>при запуске теста django не формируется отправка сообщения и <ModelName>.objects.count()остается неизменной. На практике я заметил, что ChoiceField в POST работает только если указать id нужного <ModelName>.objects. Но я передал идентификатор как «32». Поэтому мне кажется, что проблема немного в другом, а не в том, что передается неправильное значение для «страны».PS Заранее извиняюсь, что при отдельном ответе не хватает репутации для комментирования

Другие вопросы по тегам