我是Django的新手,所以我决定构建一个简单的应用程序来测试我的技能。在一种模型形式上,我有一个DateTimeField,但是它仅默认为TextField。我想用bootstrap创建一个自定义的日期时间选择器,但是我不知道如何实现它。我遵循了Tempus Dominus Bootstrap 4 here的教程。他们说的我都有,但是当我导航到表单时,它显示一个错误:“ BootstrapDateTimePickerInput”对象没有属性“ is_hidden”。
Models.py
from django.db import models
class ToDoItem(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
start_time = models.DateTimeField()
end_time = models.DateTimeField()
remind_time = models.DateTimeField()
Widgets.py
from django.forms import DateTimeField
class BootstrapDateTimePickerInput(DateTimeField):
template_name = 'main/bootstrap_datetimepicker.html'
def get_context(self,name,value,attrs):
datetimepicker_id = 'datetimepicker_{name}'.format(name=name)
if attrs is None:
attrs = dict()
attrs['data-target'] = '#{id}'.format(id=datetimepicker_id)
attrs['class'] = 'form-control datetimepicker-input'
context = super().get_context(name,attrs)
context['widget']['datetimepicker_id'] = datetimepicker_id
return context
forms.py
from django import forms
from .widgets import BootstrapDateTimePickerInput
from .models import ToDoItem
class NewEventForm(forms.ModelForm):
start_time = forms.DateTimeField(
input_formats=['%d/%m/%Y %H:%M'],widget=BootstrapDateTimePickerInput()
)
end_time = forms.DateTimeField(
input_formats=['%d/%m/%Y %H:%M'],widget=BootstrapDateTimePickerInput()
)
remind_time = forms.DateTimeField(
input_formats=['%d/%m/%Y %H:%M'],widget=BootstrapDateTimePickerInput()
)
class Meta:
model = ToDoItem
fields = ['title','description','start_time','end_time','remind_time']
views.py
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.views.generic import CreateView
from .models import ToDoItem
from .forms import NewEventForm
@login_required(login_url='/login')
def home(request):
context = {
'test':'test'
}
return render(request,'main/home.html',context)
@login_required(login_url='/login')
def new_event(request):
if request.method == 'POST':
form = NewEventForm(request.POST)
if form.is_valid():
form.save()
messages.success(request,'Event Successfully Created!')
return redirect('app-home')
else:
form = NewEventForm()
return render(request,'main/todoitem_form.html',{'form': form})
todoitem_form.html
{% extends "main/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">New Event</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Create</button>
</div>
</form>
</div>
{% endblock content %}