我正在尝试使用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模型。
谢谢。
答案 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中编写它。 希望有帮助!