Получение объекта «PostPagos» не имеет атрибута «clean_data» при добавлении ошибки проверки в форму - PullRequest
0 голосов
/ 06 февраля 2020

Я пытался добавить проверку даты, выбранной в средстве выбора календаря, идея заключается в том, что если пользователь, выбравший дату в будущем, получит сообщение о том, что она не может быть будущей датой.

Это одна из тех вещей, которые я пробовал до сих пор:

views.py

class PagosCreate(CreateView):
    form_class = PostPagos
    template_name = "AC/add_expense.html"

    def form_valid(self, form):
        object = form.save(commit=False)
        object.startweek, object.endweek = self.weekdatetimeconverter(
            object.semana)
        object.save()
        return super(PagosCreate, self).form_valid(form)

    def weekdatetimeconverter(self, semana):
        d = semana
        startweek = datetime.datetime.strptime(d + '-1', "%Y-W%W-%w")
        endweek = datetime.datetime.strptime(d + '-0', "%Y-W%W-%w")
        return (startweek, endweek)

forms.py

class PostPagos(forms.ModelForm):

    def clean(self):

        fecha = self.clean_data.get('fecha')
        today = datetime.datetime.today()
        if fecha > today:
            raise forms.ValidationError(
                'La Feha no puede ser mayor al día de hoy')
        return self.cleaned_data

    class Meta:
        model = Pagos
        fields = ('carro', 'pago', 'fecha', 'semana', 'renta')
        widgets = {'fecha': forms.DateInput(attrs={'type': 'date'}),
                   'semana': forms.DateInput(attrs={'type': 'week'})
                   }

models.py

class Pagos(models.Model):

    carro = models.ForeignKey(
        Carros, on_delete=models.CASCADE, blank=False, null=False)
    pago = models.DecimalField(max_digits=6, decimal_places=2)
    fecha = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    semana = models.CharField(max_length=20)
    startweek = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    endweek = models.DateField(
        auto_now=False, auto_now_add=False, blank=True, null=True)
    renta = models.ForeignKey(
        Renta, on_delete=models.PROTECT, blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name_plural = "Pagos"

    def get_absolute_url(self):
        return reverse('pagos')

Traceback

  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\forms\forms.py", line 377, in full_clean
    self._clean_form()
  File "C:\Users\jorge.lopez\.virtualenvs\Carros-ZVuxKBiy\lib\site-packages\django\forms\forms.py", line 404, in _clean_form
    cleaned_data = self.clean()
  File "C:\Users\jorge.lopez\Documents\Personal\Carros\carros\AC\forms.py", line 82, in clean
    fecha = self.clean_data.get('fecha')

Exception Type: AttributeError at /payments/add/
Exception Value: 'PostPagos' object has no attribute 'clean_data'

1 Ответ

1 голос
/ 06 февраля 2020

fecha = self.clean_data.get('fecha') должно быть cleaned_data.

Всегда верьте сообщению об ошибке. Это означает, что это говорит.

...