Проверка для поля даты - PullRequest
       3

Проверка для поля даты

0 голосов
/ 08 января 2019

У меня есть переопределенный формат даты в виджете формы модели django и jQuery datepicker, ошибка, что поле недопустимо

class Sale_Invoice_Main_Page(forms.ModelForm):
    class Meta:
        model = SaleInvoice
        fields = '__all__'
        exclude = ['created_at','updated_at','transiction_type']
        widgets = {'description' : forms.TextInput(attrs={ 'placeholder' : 'description'}),
                   'invoice_no' : forms.TextInput(attrs={ 'readonly' : 'True'}),
                   'total_amount' : forms.TextInput(attrs={ 'readonly' : 'True'}),
                   'invoice_date' : forms.DateInput(attrs={ 'class' : "vdate" },format=('%d-%m-%Y')),
                   'due_date' : forms.DateInput(attrs={ 'readonly' : "True" },format=('%d-%m-%Y')),
                    }


class SaleInvoice(models.Model):
    customer = models.ForeignKey(Customer_data , on_delete=models.CASCADE)
    invoice_date = models.DateField(null=True,blank=True)
    invoice_no = models.PositiveIntegerField(unique=True)
    due_date = models.DateField(blank=True,null=True)
    address = models.TextField()
    total_amount = models.PositiveIntegerField(null=True,blank=True)
    description = models.TextField(null=True,blank=True)
    transiction_type = models.CharField(max_length=50,blank=True)
    author = models.CharField(max_length=30)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.address

jQuery указатель даты:

{#     Date Picker#}
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <link rel="stylesheet" href="/resources/demos/style.css">
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <script>
        $( function() {
            $( ".vdate" ).datepicker({
                dateFormat: "dd-mm-yy"
            });
        } );
    </script>

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

1 Ответ

0 голосов
/ 09 января 2019

Это может быть немного сложно с локализацией иногда. Обычно вы добавляете DATE_INPUT_FORMATS к вашим настройкам. Форматы из этого списка будут приняты при вводе данных в поле даты, означающее добавление

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

к вашим настройкам должно исправить вашу проблему. Но иногда это может быть немного сложнее, когда USE_L10N установлен на True, потому что в этом случае формат, определяемый локалью, имеет более высокий приоритет и будет применяться вместо него. По этой причине я предлагаю вам не жестко кодировать формат даты в вашем jQuery datepicker, а использовать значения по умолчанию и получить формат даты из DATE_INPUT_FORMATS. Нечто подобное должно сработать:

from django.utils import formats
# First date format in default (English) is '%Y-%m-%d', most European languages '%d.%m.%Y' etc.
date_format = formats.get_format("DATE_INPUT_FORMATS")[0]
date_format = date_format.split()[0].replace('%Y', 'YY').replace('%d', 'dd').replace('%m', 'mm')

и используйте в нем свой шаблон:

<script>
    $( function() {
        $( ".vdate" ).datepicker({
            dateFormat: "{{ date_format }}"
        });
    } );
</script>

Таким образом, формат даты будет соответствовать независимо от приоритета формата. Желательно, чтобы вы включили формат даты в свой собственный контекстный процессор . Теперь он будет включен в контекст всех ваших шаблонов.

my_context_processor.py

from django.utils import formats

def common_context(request):
    ''' Common variables used in templates '''

    date_format = formats.get_format("DATE_INPUT_FORMATS")[0]
    date_format = date_format.split()[0].replace('%Y', 'YYYY').replace('%d', 'dd').replace('%m', 'mm')

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