Django日期和时间选择器

时间:2020-06-11 01:05:06

标签: html django calendar

我正在尝试使用django建立我的第一个网站,到目前为止,我已经完成了用户注册和登录,但是现在我遇到了麻烦:我想向用户显示每周日历,让他们可以选择一天并进行预订体育课。 我试图像表单域一样每周工作一次,但是没有用。

有关如何解决此问题的任何建议?

我正在寻找类似解释/教程的内容,如果可能的话,将避免使用github项目。

谢谢!

更新 Alrigth,感谢我的回答,我做到了: 1.我在名为register的应用程序中的forms.py中注册新用户:

myWooCommerce.fetchLoggedInUser() // returns the logged in user.
myWoocommerce.addToCart(quantity, id, [variations]);

myWooCommerce.createOrder(WooOrderPayload order); // etc

2。创建一个名为“保留”的新应用程序,在该模型中,我试图建立一个新数据库

from django import forms
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class RegisterForm(UserCreationForm):
    first_name=forms.CharField(max_length=50)
    last_name=forms.CharField(max_length=50)
    email=forms.EmailField()
    mobile=forms.CharField(max_length=13)


    class Meta:
        model = User
        fields=['username','first_name','last_name','email','mobile','password1', 'password2']

但是在这里我得到了这个错误:

from django.db import models
from register import forms
import datetime


class Booking(models.Model):
    class_name = models.ForeignKey('Class', on_delete=models.CASCADE)
    created_by = forms.ForeignKey('User', on_delete=models.SET_NULL, related_name="bookings")
    created_datetime = models.DateTimeField(auto_now_add=True, blank=True, editable=False)
    selected_datetime = models.DateTimeField(blank=True)


class Class(models.Model):
     class_time=models.DateTimeField()
     class_day=models.DateField()
     MIN_PEOPLE = 2 #not less than 2 people each class
     MAX_PEOPLE = 12 #not more than 12 allowed

3。在预订中,我创建了一个名为Reservation.html的html页面,在其中放置了日历,希望用户选择一天,一个上课时间并进行预订

AttributeError: module 'register.forms' has no attribute 'ForeignKey'

问题是:我不知道如何将Reservation.html连接到Reservation / models.py中的数据库以及带有预订类的User模型。

谢谢。

2 个答案:

答案 0 :(得分:0)

您需要制作一个模型(或使用现有模型,例如,如果有的话,请使用Profile)-请参考Django文档:https://docs.djangoproject.com/en/3.0/topics/db/models/

然后,您将使用DateTimeField使用一个特定的字段来选择日期和时间:https://docs.djangoproject.com/en/3.0/ref/models/fields/#datetimefield

为了获取日期选择器,可以使用许多选项。我做了以下工作,效果很好。在forms.py的用户应用程序中,添加了以下内容:

class DateTimeInput(forms.DateTimeInput):
       input_type = 'date_time'

然后在Profile类的Meta类下:

widgets = {
         'date_time': DateTimeInput(),
               }

有关详细信息,请参阅文档:https://docs.djangoproject.com/en/3.0/ref/forms/widgets/

试试看,看看能走多远,如果遇到问题,请更新问题。

答案 1 :(得分:0)

听起来您可能正在尝试重新发明轮子。 Django可以提供内置的日期和时间选择器。由于我们看不到您正在使用的代码,因此我作一些假设:

假设您有一个名为Bookings的数据库模型

# models.py

import datetime

class Booking(models.Model):
    class_name = models.ForeignKey('Class', on_delete=models.CASCADE)
    created_by = models.ForeignKey('UserProfile', on_delete=models.SET_NULL, related_name="bookings")
    created_datetime = models.DateTimeField(auto_now_add=True, blank=True, editable=False)
    selected_datetime = models.DateTimeField(blank=True)

然后,当您在前端创建表单时,请使用Django内置的表单模板(https://docs.djangoproject.com/en/3.0/ref/forms/

#myapp/forms.py

from django import forms

class BookingForm(BookingForm):
    class Meta:
        model = Booking
        fields = ('class_name', 'selected_datetime ')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['class_name'].widget.attrs['class'] = 'formInputs'
        self.fields['class_name'].widget.attrs['placeholder'] = 'Class Name'
        self.fields['class_name'].label = 'Class Name'

        self.fields['selected_datetime '].widget.attrs['class'] = 'formInputs'
        self.fields['selected_datetime '].widget.attrs['placeholder'] = 'Select a class time'
        self.fields['selected_datetime '].label = 'Select a class time'

Views.py文件如下所示:

#views.py

from myapp.forms import BookingForm
from api.models import Booking

def choose_class(request):
    form = BookingForm()

    if request.method == 'POST':
        # this is where you would handle the returned data, and save it to the database 
        class_name = request.POST['class_name']
        selected_datetime = request.POST['selected_datetime ']
        Booking.objects.create(class_name = class_name, selected_datetime=selected_datetime)

    return render(request, 'choose_class.html', {'form':form})

然后,您的HTML模板将如下所示:

#choose_class.html

{% extends 'myapp/base.html' %}
{% load staticfiles %}

{% block content %}


<div class="chooseClass">
    <h4 class="text-center">Choose Class</h4>

    <form class="chooseClassForm" method="POST" action="{% url 'choose_class' %}">
        {% csrf_token %}
        {% if form.errors %}
            <div class="alert alert-danger" role="alert">
                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                    <span aria-hidden="true">x</span>
                </button>
                <p>Oops! Please double check the following errors:</p>
                {% for field in form %}
                    {% if field.errors %}
                        {{ field.errors }}
                    {% endif %}
                {% endfor %}
            </div>
        {% endif %}
        {{ form.as_p }}
        <input type="submit" value="Choose that class" class="btn btn-primary">
    </form>
</div>

{% endblock %}

无论如何,它还不止于此,但是由于您没有给我们太多工作,这就是我现在要提供的,并且这是未经测试的代码,自从我可能会出现一些错误没有先在IDE中编写它。 希望有帮助!

相关问题