Reputation: 327
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.
But in HTML I want separate fields like below with only one datetime field in model
Is there any way to achieve this?
Upvotes: 7
Views: 6174
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
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)
Altough, if you want a label for each one, you will need to modify your template, or use separate form attributes.
Upvotes: 4
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
Reputation: 2338
You can use models.DateTimeField
to store dateTime in one field.
DateTimeField
Upvotes: 0
Reputation: 13753
That is exactly what DateTimeField is for.
date_time = models.DateTimeField()
Upvotes: 0