Поле IPAddress для администратора Django не разрешает *.*. *.*

#django #django-admin

#django #django-admin

Вопрос:

Как разрешить IPAddressField принимать строку ..*.*?

Теперь каждый раз, когда я пытался сохранить, я получал Введите действительный адрес IPv4. ошибка.

Комментарии:

1. Ну … да. Это недопустимый IP-адрес. Возможно, вам следует описать, что вам действительно нужно.

2. я бы предположил, что Кельвину нужен любой IP-адрес.

3. «Любой IP-адрес» — это адрес 0.0.0.0 с маской 0 или 0.0.0.0.

Ответ №1:

 class YourForm(forms.Form):
    ipfield = forms.CharField()

    def clean_ipfield(self):        
        value = self.cleaned_data['ipfield']
        # Check if they saved an IP, only use this if the field is required
        if not value:
            if self.fields['ipfield'].required:
                raise forms.ValidationError('No IP was given')
            else:
                return value

        ip = value.split('.')

        # Make sure the ip has atleast 4 parts to it
        # Upto 8 are required for IPv6
        if 4 > len(ip) or len(ip) > 8 :
            raise forms.ValidationError('An invalid IP address was entered')

        # Check that all parts are digits or '*' (additional checks can be done here too)
        for i in ip:
            if i != '*' and not i.isdigit():
                raise forms.ValidationError('%s is not a valid IP part' % i)

        return '.'.join(ip)
  

Не уверен, что это то, что вам нужно или нет. Вместо использования фактического IpAddressField() вы могли бы использовать CharField() и предоставить пользовательские проверки самостоятельно, вот так.
Обратите внимание, что YourForm — это имя вашей фактической формы, а ipfield — это имя вашего текущего поля IpAddressField.

Надеюсь, это поможет.