使用ModelForm格式化DateField中的数据 - Django 1.11

时间:2017-10-14 21:14:26

标签: python django django-forms

我正在创建一个使用ModelForm的编辑视图,我希望表单的日期字段以下列格式显示:“%d /%m /%Y ”。

但是,无论我做什么,当调用编辑页面时,日期将以“%m-%d-%Y ”格式显示。

models.py

class Pessoa(models.Model):
    nome = models.CharField(max_length=255, null=False)
    sobrenome = models.CharField(max_length=255, null=False)
    cpf = models.CharField(max_length=14)
    data_nascimento = models.DateField()
    rg = models.CharField(max_length=15, null=False)
    responsavel = models.ForeignKey('Pessoa', related_name='dependentes', blank=True, null=True)
    foto = models.ImageField(upload_to='pessoas')

    usuario_alteracao = models.CharField(max_length=255, blank=True, null=True)

    data_criacao = models.DateTimeField(auto_now_add=True)
    data_alteracao = models.DateTimeField(auto_now=True)

settings.py(DATETIME_INPUT_FORMATS和DATE_INPUT_FORMATS)

DATE_INPUT_FORMATS = ['%d/%m/%Y']

DATETIME_INPUT_FORMATS = ['%d/%m/%Y']

pessoas_forms.py

class PessoaForm(ModelForm):

    data_nascimento = DateField(
        input_formats=settings.DATE_INPUT_FORMATS,
        widget=DateInput(attrs={'class': "input", 'placeholder': "Ex.: dd/mm/aaaa", "OnKeyPress":"mask('##/##/####', this)"}))

    class Meta:
        model = Pessoa
        fields = ['nome', 'sobrenome', 'cpf', 'data_nascimento', 'rg', 'foto']
        exclude = ['usuario', 'usuario_alteracao', 'data_criacao', 'data_alteracao', 'responsavel']
        widgets = {
            'nome': TextInput(attrs={'class': "input"}),
            'sobrenome': TextInput(attrs={'class': "input"}),
            'cpf': TextInput(attrs={'class': "input", 'placeholder': "Ex.: 000.000.000-00", "OnKeyPress":"mask('###.###.###-##', this)"}),
            'rg': TextInput(attrs={'class': "input"}),
        }

views.py

def get(self, request, id):

        try:
            pessoa = Pessoa.objects.get(id=id)

        except ObjectDoesNotExist:
            messages.warning(request, 'Not Found.')
            return redirect('pessoas')

        pessoa_form = PessoaForm(instance=pessoa)

        context = {
            'pessoa_form': pessoa_form,
            'id': pessoa.id
        }

        return render(request, 'sagasystem/configuracoes/pessoas/editar_pessoa.html', context)

1 个答案:

答案 0 :(得分:2)

您需要使用format参数告诉窗口小部件如何显示日期。

data_nascimento = DateField(
    widget=DateInput(format='%d/%m/%Y', attrs={'class': "input", 'placeholder': "Ex.: dd/mm/aaaa", "OnKeyPress":"mask('##/##/####', this)"}))