Seraphine
Seraphine

Reputation: 1

DateTimeField not showing previous date and time when editing

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

Answers (1)

Raphael Amponsah
Raphael Amponsah

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

Related Questions