1
resposta

Comportamento do DatePicker()

Olá,

Eu estou gostando bastante do curso, e nem sei se eu tenho uma dúvida.

Aqui no meu computador, quando o usuário comete um erro, as informações da data de ida e da data de volta somem do formulário, mas no formulário do instrutor os campos continuam preenchidos. Eu fiz alguma coisa errada ou isso depende do sistema operacional, navegador e afins? Coloco uma figura abaixo para ilustar.

campos vazio da data de ida e da data de volta

Código do arquivo form.py

from django import forms
from django.forms.widgets import Textarea
from tempus_dominus.widgets import DatePicker
from datetime import datetime
from .classes_viagem import tipo_classe
from passagens.models import Passagem, ClasseViagem, Pessoa


class PassagensForms(forms.ModelForm):
    data_pesquisa = forms.DateField(
        label='Data da pesquisa', disabled=True, initial=datetime.today())

    class Meta:
        model = Passagem
        fields = '__all__'
        labels = {
            'data_ida': 'Data de ida',
            'data_volta': 'Data de volta',
            'informacoes': 'Informações',
            'classe_viagem': 'Classe do voô',
        }
        widgets = {
            'data_ida': DatePicker(),
            'data_volta': DatePicker(),
        }

    def clean(self):
        origem = self.cleaned_data.get('origem')
        destino = self.cleaned_data.get('destino')
        data_ida = self.cleaned_data.get('data_ida')
        data_volta = self.cleaned_data.get('data_volta')
        data_pesquisa = self.cleaned_data.get('data_pesquisa')

        list_errors = {}

        has_number(origem, 'origem', list_errors)
        has_number(destino, 'destino', list_errors)
        is_equal(origem, destino, list_errors)
        is_date_ida_greater_date_volta(data_ida, data_volta, list_errors)
        is_date_smaller_than_today(data_ida, data_pesquisa, list_errors)

        if bool(list_errors):
            for field, msg in list_errors.items():
                self.add_error(field, msg)


        return self.cleaned_data

class PessoaForms(forms.ModelForm):
    class Meta:
        model = Pessoa
        exclude = ['nome']

def is_equal(destino, origem, list_errors):
    """Check if 'destino' and 'origem are equal'

    Args:
        destino ([str]): string indicating the 'Origem' city
        origem ([str]): string indicating the 'Destino' city
        list_errors ([dict]): global list with errors messages
    """
    if destino == origem:
        list_errors['destino'] = '"Origem" and "Destino" must be different.'


def has_number(field_value, field_name, list_errors):
    """Check if a field has number. 

    Args:
        field_value ([str]): value of the field where we will check if there is any number
        field_name ([str]): name of field
        list_errors ([dict]): global list with errors messages
    """
    if any(char.isdigit() for char in field_value):
        list_errors[field_name] = f'"{field_name}" can not have numbers.'


def is_date_ida_greater_date_volta(ida, volta, list_errors):
    """Check if ida <= volta

    Args:
        ida ([datetime]): datetime of ida
        volta ([dateime]): datetime of volta
        list_errors ([dict]): global list with errors messages
    """
    if ida > volta:
        list_errors['data_volta'] = 'date "ida" must be smaller or equal than data "volta"'


def is_date_smaller_than_today(data_ida, data_pesquisa, list_errors):
    """Check if date of 'ida' is greater or equal than today

    Args:
        data_ida ([datetime]): datetime of ida
        data_pesquisa ([datetime]): datetime of volta
        list_errors ([dict]): global list with erros messages
    """
    if data_ida < data_pesquisa:
        list_errors['data_ida'] = 'date "ida" must be greater or equal than today'

Código do arquivo views.py

from django.shortcuts import render
from passagens.forms import PassagensForms, PessoaForms


# Create your views here.
def index(request):
    form = PassagensForms()
    pessoa = PessoaForms()

    dados = {
        'form': form,
        'pessoa_form': pessoa,
    }

    return render(request, 'index.html', dados)


def revisao_consulta(request):
    if request.method == 'POST':
        form = PassagensForms(request.POST)
        pessoa_form = PessoaForms(request.POST)
        if form.is_valid():
            dados = {
                'form': form,
                'pessoa_form': pessoa_form,
            }
            return render(request, 'minha_consulta.html', dados)
        else:
            dados = {
                'form': form,
                'pessoa_form': pessoa_form,
            }
            return render(request, 'index.html', dados)
1 resposta
O post foi fechado por inatividade após 6 meses. Para continuar o assunto, recomendamos criar um novo tópico. Bons Estudos!