Django: validate_date () отсутствует 1 обязательный позиционный аргумент: 'значение' - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь реализовать валидаторы для проекта Django. Я определил файл validators.py в myapp

Я добавляю валидаторы = [validate_test] для моего поля ran_num, но получил ошибку

У меня есть еще один вопрос: возможно ли контролировать поле ДО отправки формы?

validators.py

from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _


def validate_test(self, value):
    if value == 'PPP': # just test
        raise ValidationError(
            _("Test"),
            code='Test',
            params={},
        )

forms.py

from .validators import validate_date

class EditForm(forms.ModelForm):

    def __init__(self, request, *args, **kwargs):
        super(EditForm, self).__init__(*args, **kwargs)
        self.request = request

        self.fields["asp_ent_loc"] = forms.ChoiceField(label = _("Site concerned by the operation"), widget=forms.Select, choices=SITE_CONCERNE)
        self.fields["med_num"] = forms.CharField(label = _("Trial bacth number"), required=True,validators=[validate_test] )
        self.fields["asp_ent_dat"] = forms.DateField(
                label = _("Entry date"),
                required = True,
                initial = datetime.datetime.now(),  

            )
        self.fields["asp_ent_pro_pay"] = forms.ChoiceField(label = _("Country of treatment origin in case of entry"), widget=forms.Select, choices=PAYS)
        self.fields["asp_ent_pro_sit"] = forms.ChoiceField(label = _("Processing source site in case of entry"), widget=forms.Select, choices=SITE_PROVENANCE)

    def clean(self):
        cleaned_data = super(EditForm, self).clean()

    class Meta:
        model = Entree
        fields = ('asp_ent_loc','med_num','asp_ent_dat','asp_ent_pro_pay','asp_ent_pro_sit',)

    def clean_med_num(self):
        data = self.cleaned_data['med_num']
        if len(data) != 3:
            raise forms.ValidationError(_("Error on Batch number format (3 letters)"))
        if not Medicament.objects.filter(med_num = data).exists():
            raise ValidationError(_('Batch number does not exist'))
        return data

    def clean_asp_ent_dat(self):
        data = self.cleaned_data['asp_ent_dat']
        entrydate = datetime.datetime.strptime(str(data), "%Y-%m-%d")
        currentdate = datetime.datetime.now()
        if entrydate > currentdate:
            raise forms.ValidationError(_("Please control entry date"))
        return data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...