'Separate Datetime field to show Date and Time separate in HTML using Django

I am using Python 3.6 and Django as web framework I have to save datetime together in my database but show date and time separate field in HTML. Model Code:

class date_time(models.Model):
    date = models.DateField(default=timezone.now)
    time = models.TimeField(default=timezone.now)

Form Code:

class date_time_Form(forms.ModelForm):
    class Meta:
        model = date_time
        fields = ('date', 'time',)
        widgets = {
            'date': forms.TextInput(attrs={'class': 'form-control', 'type': 'date'}),
            'time': forms.TextInput(attrs={'class': 'form-control', 'type': 'time'}),
        }
        labels = {
            'date': 'Date',
            'time': 'Time',
        }

Currently, I am storing in a separate field but I want to save in one field date+time.

Update - I can use Datetime field but that will create only one element in HTML page. When I use Datetime field

But in HTML I want separate fields like below with only one datetime field in model Desired output

Is there any way to achieve this?



Solution 1:[1]

You can use SplitDateTimeField: https://docs.djangoproject.com/en/3.0/ref/forms/fields/#splitdatetimefield

class Myform(forms.Form):
    start_date = forms.SplitDateTimeField(initial=datetime.datetime.now)

Example of SplitDateTime field

Altough, if you want a label for each one, you will need to modify your template, or use separate form attributes.

Solution 2:[2]

That is exactly what DateTimeField is for.

date_time = models.DateTimeField()

Solution 3:[3]

You can use models.DateTimeField to store dateTime in one field. DateTimeField

Solution 4:[4]

You can get the date and time from the HTML, then combine them into a DateTime object. See Pythonic way to add datetime.date and datetime.time objects for how.

If you want the reverse (taking a DateTime, and getting the date and time), you can see How do I convert datetime to date (in Python)? and Convert datetime to time in python

Solution 5:[5]

The DateTimeField format is the following:

2022-04-23 00:22:55.654914+00:00

All you have to do, is load your DateTimeField variable in the view, and get the separate elements before passing them to context:

myobj = MyModel.objects.get(id=id)
dtf = myobj.datetimefield

date = str(dtf)[:10]
time = str(dtf)[11:19]

Now you can pass date and time in your context and display them.

When getting data back from HTML to Django, all you can do is put back the data together dtf = date + time and pass it to the object and save. I know this will only yield this format 2022-04-23 00:22:55 but it works, and you can also add the milliseconds and timezone if you want, or setup a default one.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Checo R
Solution 2 Jahongir Rahmonov
Solution 3 Dharmesh Fumakiya
Solution 4 Eric
Solution 5 Kaiss B.