Django value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.']

Question:

I have a Django project. I want to press button and date time save to database, but there is an error.

File view.py

        def confirm_order(request, pk):
            get_emp = get_object_or_404(Employee, pk=pk)
            if request.method == 'POST':
                new_end_date = request.POST['new_date']
                get_emp.end_date = new_end_date
                get_emp.save()
                return redirect('all_emp')     
            else:
                context = {
                    'get_emp': get_emp,
                }
                return render(request, 'confirm_order.html', context)
ValidationError at /confirm_order/5/
['“Feb. 29, 2023, 3:48 p.m.” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.']
Request Method: POST
Request URL:    http://127.0.0.1:8001/confirm_order/5/
Django Version: 4.2.1
Exception Type: ValidationError
Exception Value:    
['“Feb. 29, 2023, 3:48 p.m.” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.']
Exception Location: /home/gino/PycharmProjects/office_emp_proj/venv/lib/python3.10/site-packages/django/db/models/fields/__init__.py, line 1567, in to_python
Raised during:  emp_app.views.confirm_order
Python Executable:  /home/gino/PycharmProjects/office_emp_proj/venv/bin/python
Python Version: 3.10.12
Python Path:    
['/home/gino/PycharmProjects/office_emp_proj',
 '/home/gino/PycharmProjects/office_emp_proj',
 '/snap/pycharm-professional/364/plugins/python/helpers/pycharm_display',
 '/usr/lib/python310.zip',
 '/usr/lib/python3.10',
 '/usr/lib/python3.10/lib-dynload',
 '/home/gino/PycharmProjects/office_emp_proj/venv/lib/python3.10/site-packages',
 '/usr/local/lib/python3.10/dist-packages',
 '/usr/lib/python3/dist-packages',
 '/snap/pycharm-professional/364/plugins/python/helpers/pycharm_matplotlib_backend']
Server time:    Mon, 01 Jan 2024 09:10:25 +0800

error_image

How can I resolve this problem?

Asked By: Gino

||

Answers:

The error might be due to the format of the date you’re trying to save. Django expects dates in a specific format (YYYY-MM-DD) and if the date you’re trying to save doesn’t match this format, it will throw an error.

You can use Python’s datetime module to parse the date from the request and convert it to the correct format. Here’s how you can do it:

from datetime import datetime

def confirm_order(request, pk):
    get_emp = get_object_or_404(Employee, pk=pk)
    if request.method == 'POST':
        new_end_date_str = request.POST['new_date']
        # Parse the date from the request
        new_end_date = datetime.strptime(new_end_date_str, '%Y-%m-%d').date()
        get_emp.end_date = new_end_date
        get_emp.save()
        return redirect('all_emp')     
    else:
        context = {
            'get_emp': get_emp,
        }
        return render(request, 'confirm_order.html', context)

datetime.strptime is used to parse the date from the request. The second argument to strptime is the format of the date in the request. You should replace %Y-%m-%d with the format of the date you’re receiving in the request.

Here is the documentation:
https://docs.python.org/3/library/datetime.html

Answered By: Jannik Sinz
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.