__init__() получил неожиданный аргумент ключевого слова 'required' в нетестировании Django

Я получил утверждение и ошибку типа при написании модульного теста Django для моего приложения, может ли кто-нибудь проверить и помочь мне решить это. Оба теста работают нормально, только вывод при вызове form.is_invalid() отличается.

Ошибка1:

Traceback (most recent call last):
  File "D:\open-source\localflavourtest\test_np\tests.py", line 104, in test_NepalPostalCodeFieldTest
    self.assertFieldOutput(NepalDetailsTestForm, valid, invalid)
  File "C:\Users\Asus\Envs\test\lib\site-packages\django\test\testcases.py", line 753, in assertFieldOutput
    optional = fieldclass(*field_args, **{**field_kwargs, 'required': False})
TypeError: __init__() got an unexpected keyword argument 'required'

Ошибка 2

FAIL: test_NepalPostalCodeFieldTest (test_np.tests.NepalCodeTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\open-source\localflavourtest\test_np\tests.py", line 113, in test_NepalPostalCodeFieldTest
    self.assertEqual(form.errors['postal_code'], error_format)
AssertionError: ['Ensure this value has at most 5 characters [51 chars]XXX'] != ['Enter a postal code in the format XXXXX']

Вот мой код, я отметил строку, где я получаю эти ошибки,

class NepalPostalCodeValidator(RegexValidator):
    default_error_messages = {
        'invalid': _('Enter a postal code in the format XXXXX'),
    }

    def __init__(self,*args, **kwargs):
        super().__init__(re.compile(r'^\d{5}$'), *args,**kwargs)

class PostalCodeFormField(RegexField):
    default_error_messages = {
        'invalid': _('Enter a postal code in the format XXXXX'),
    }

    def __init__(self,max_length = 5, **kwargs):
        super().__init__(r'^\d{5}$', max_length = max_length, **kwargs)

class PostalCodeField(models.CharField):
    description = _("Postal Code")

    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = 5
        super().__init__(*args, **kwargs)
        self.validators.append(NepalPostalCodeValidator())

    def formfield(self, **kwargs):
        defaults = {'form_class': PostalCodeFormField}
        defaults.update(kwargs)
        return super().formfield(**defaults)

class NepalDetailsTestModel(models.Model):
    postal_code = PostalCodeField()

class NepalDetailsTestForm(forms.ModelForm):
    class Meta:
        model = NepalDetailsTestModel
        fields = ('postal_code',)

class NepalCodeTest(TestCase):
    def test_NepalPostalCodeFieldTest(self):
        error_format = ['Enter a postal code in the format XXXXX']
        valid = {
            '12345': '12345',
            '00000':'00000',
            '23476': '23476'
        }
        invalid = {
            '12345_123': error_format,
            '1234-123': error_format,
            'abcde-abc': error_format,
            '12345-': error_format,
            '-123': error_format,
        }

        # getting type error at this place
        # Error 1 as given above
        self.assertFieldOutput(NepalDetailsTestForm, valid, invalid)

        for postal_code, _ in invalid.items():
            form = NepalDetailsTestForm({
                'postal_code':postal_code,
            })
            self.assertFalse(form.is_valid())

            # getting assertion error at this place
            # error 2 as given above.
            self.assertEqual(form.errors['postal_code'], error_format)
Вернуться на верх