Введите действительную дату / время в Django формах - PullRequest
0 голосов
/ 16 февраля 2020

Каждый раз, когда я пытаюсь ввести дату и время в мою форму, всегда отображается Введите действительную дату / время Я пробовал разные форматы даты и времени; тот, который я указал, и те по умолчанию, они все не работали. Я пробовал разные решения по переполнению стека, но все они, похоже, не работают. Поле, с которым у меня возникла эта проблема: due_date

ПРИМЕЧАНИЕ: я не показывал импорт

Кроме того, мне нужны рекомендации для хороших сборщиков даты и времени. Все те, которые я пробовал, не работали по той или иной причине.

views.py:

@login_required
def task_create(request):
    data = dict()
#, data=request.POST
    if request.method == 'POST':
        form = TaskForm(request.user, data=request.POST)
        if form.is_valid():
            form.save()
            data['form_is_valid'] = True
        else:
            data['form_is_valid'] = False
    else:
        form = TaskForm(request.user)

    context = {'form': form}
    data['html_form'] = render_to_string('partial_task_create.html',
        context,
        request=request
    )
    return JsonResponse(data)  

forms.py:

class TaskForm(ModelForm):

    due_date = forms.DateTimeField(input_formats=['%I:%M %p %d-%b-%Y'])    
    parent = forms.ModelChoiceField(queryset=Task.objects.all(), empty_label="---None---", required=False)
    #widget=DateTimePickerInput(format='%I:%M %p %d-%m-%Y')

    class Meta:
        model = Task
        fields = ['task_title', 'task_description', 'due_date', 'is_completed', 'categories', 'parent']   
        widgets = {
             #'due_date': DateTimeInput()
        }     

    def __init__(self, user, *args, **kwargs):        
        super(TaskForm, self).__init__(*args, **kwargs)
        self.fields['categories'].queryset = Categories.objects.filter(Q(user_id__isnull=True) | Q(user_id=user.id))

1 Ответ

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

Вам нужно будет установить атрибут виджета в поле формы due_date для соответствия форматам ввода. Что-то вроде:

due_date = forms.DateTimeField(input_formats=['%I:%M %p %d-%b-%Y'],
             widget = forms.DateTimeInput(
                 attrs={'type': 'datetime-local'},
                 format='%I:%M %p %d-%b-%Y')) 

Для сборщиков даты и времени посмотрите на https://github.com/xdan/datetimepicker

...