在Django窗体中添加自定义DateTimePicker

2024-04-27 16:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的新手,所以我决定构建一个简单的应用程序来测试我的技能。在其中一个模型表单上,我有一个DateTimeField,但它只默认为TextField。我想创建一个自定义的日期时间选择器与引导,但我不知道如何实现它。我遵循了Tempus Dominus Bootstrap 4here的教程。我有他们说的一切,但当我导航到我的窗体时,它会显示一个错误:“BootstrapDateTimePickerInput”对象没有属性“is\u hidden”。你知道吗

你知道吗型号.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()

你知道吗小工具.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, value, attrs)
        context['widget']['datetimepicker_id'] = datetimepicker_id
        return context

你知道吗表单.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'] 

你知道吗视图.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})

待办事项_表单.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 %} 

Tags: djangonamefromimportformtimemodelsrequest