displayname
displayname

Reputation: 327

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?

Upvotes: 7

Views: 6174

Answers (5)

Kaiss B.
Kaiss B.

Reputation: 347

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.

Upvotes: 0

Checo R
Checo R

Reputation: 922

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.

Upvotes: 4

Eric
Eric

Reputation: 810

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

Upvotes: 0

Dharmesh Fumakiya
Dharmesh Fumakiya

Reputation: 2338

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

Upvotes: 0

Jahongir Rahmonov
Jahongir Rahmonov

Reputation: 13753

That is exactly what DateTimeField is for.

date_time = models.DateTimeField()

Upvotes: 0

Related Questions