Reputation: 1
I want previously set dates and times to be displayed before they are edited. The previously set name and description of my event are being displayed as it should. Here's a part of my code:
Forms:
class EventForm(forms.ModelForm):
name = forms.CharField(label='Event name', widget=forms.TextInput(attrs={'class': 'form-control'}))
description = forms.CharField(label='Description', required=False, widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 4, 'cols': 15}))
date_hour_start = forms.DateTimeField(input_formats=['%d/%m/%Y %H:%M'], widget=forms.DateTimeInput(attrs={'type': 'datetime-local', 'class': 'form-control col-md-4'}))
date_hour_end = forms.DateTimeField(input_formats=['%d/%m/%Y %H:%M'], widget=forms.DateTimeInput(attrs={'type': 'datetime-local', 'class': 'form-control col-md-4'}))
Views:
def event_update_view(request, event_id):
event = get_object_or_404(Event, event_id=event_id)
event.date_hour_start = datetime.datetime.strftime(event.date_hour_start, '%d/%m/%Y %H:%M:%S')
event.date_hour_end = datetime.datetime.strftime(event.date_hour_end, '%d/%m/%Y %H:%M:%S')
if request.method == 'POST':
form = EventForm(request.POST, instance=event)
if form.is_valid():
event = form.save()
event.save()
return redirect(reverse('list_events'))
return redirect(reverse('list_events'))
def event_create_view(request):
form = EventForm(request.POST or None)
if form.is_valid():
form.save()
form = EventForm()
return redirect(reverse('list_events'))
context = {
'form': form
}
return render(request, "eventss/add_event.html", context)
HTML (just a part):
<div class="col-md-12">
<p style="margin-bottom: .5rem">Date and Time (Start) <span style="color:red">*</span></p>
{{ form.date_hour_start }}
</div>
<div class="col-md-12">
<p style="margin-bottom: .5rem">Date and Time (End)<span style="color:red">*</span></p>
{{ form.date_hour_end }}
</div>
Why isn't it working? Here's how it's showing. (It's aaaa because it's in Portuguese but it's the year)
Upvotes: 0
Views: 351
Reputation: 567
To get the instance date and time to show in the datetime-locale input, please change the form input using widgets to the following:
widgets = {
'start_date': forms.DateTimeInput(attrs={'class': 'form-control', 'type': 'datetime-local'}, format='%Y-%m-%dT%H:%M'),
'end_date': forms.DateTimeInput(attrs={'class': 'form-control', 'type': 'datetime-local'}, format='%Y-%m-%dT%H:%M'),
}
Upvotes: 1