Django-如何设置模型的日期格式.DateField()?终端不断抛出日期验证错误



我找不到更改模型格式的方法。日期字段((。我的应用程序接受用户以"%"格式输入的日期m%d%YY";。有什么方法可以更改Datefield((django模型的日期格式吗?请帮助

我的型号.py

from phonenumber_field.modelfields import PhoneNumberField
# Create your models here.
class reservations_db(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
phone = PhoneNumberField(blank=False)
date = models.DateField(null=True, blank=False)
time = models.TimeField()
person = models.IntegerField()
class Meta():
verbose_name_plural = "Reservations list"

我的观点.py

from django.shortcuts import render
from .models import reservations_db
# Create your views here.
def reservation(request):
if request.method == 'POST':
object=reservations_db()
object.name = request.POST['name']
object.email = request.POST['email']
object.phone = request.POST['phone']
object.date = request.POST['date']
object.time = request.POST['time']
object.person = request.POST['person']
object.save()

return render(request,'reservation.html')

迁移文件

class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='reservations_db',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('email', models.EmailField(max_length=254)),
('phone', phonenumber_field.modelfields.PhoneNumberField(max_length=128, region=None)),
('date', models.DateTimeField(null=True)),
('time', models.TimeField()),
('person', models.IntegerField()),
],
options={
'verbose_name_plural': 'Reservations list',
},
),
]

终端错误消息:

File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangocorehandlersbase.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangocorehandlersbase.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:OneDrive - CACTUSMy DocumentsGitHubLibbys_restaurantbooktableviews.py", line 14, in reservation
object.save()
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsbase.py", line 745, in save
self.save_base(using=using, force_insert=force_insert,
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsbase.py", line 782, in save_base
updated = self._save_table(
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsbase.py", line 887, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsbase.py", line 924, in _do_insert
return manager._insert(
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsmanager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsquery.py", line 1204, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelssqlcompiler.py", line 1391, in execute_sql
for sql, params in self.as_sql():
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelssqlcompiler.py", line 1334, in as_sql
value_rows = [
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelssqlcompiler.py", line 1335, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelssqlcompiler.py", line 1335, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelssqlcompiler.py", line 1276, in prepare_value
value = field.get_db_prep_save(value, connection=self.connection)
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsfields__init__.py", line 821, in get_db_prep_save
return self.get_db_prep_value(value, connection=connection, prepared=False)
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsfields__init__.py", line 1220, in get_db_prep_value
value = self.get_prep_value(value)
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsfields__init__.py", line 1215, in get_prep_value
return self.to_python(value)
File "C:Userslibin.thomasEnvsfreelancinglibsite-packagesdjangodbmodelsfields__init__.py", line 1187, in to_python
raise exceptions.ValidationError(
django.core.exceptions.ValidationError: ['“8/25/2020” value has an invalid date format. It must be in YYYY-MM-DD format.']

请注意,我不想使用froms。Datefield((选项。如果能避免与表单字段相关的建议,我们将不胜感激。提前感谢各位:(

在您的模型中,您有一个DateField,但在迁移文件中,它显示DateTimeField,这可能是导致问题的原因。将迁移文件更改为其应有的格式,再次运行迁移,然后它就可以工作了。

使用ModelForm-创建一个新的forms.py文件,并在其中放入以下内容:

from django.forms import ModelForm
from app.models import reservations_db
class ReservationForm(ModelForm):
class Meta:
model = reservations_db  #Note that good practice is to capitalise your model names and they shouldn't be plural; a better name would therefore be Reservation
fields = ('name', 'email', 'phone', 'date') #here you add all the fields you want in the form

文件中的注释:

生成的Form类将为每个模型字段提供一个Form字段按照fields属性中指定的顺序指定。

有关详细信息:https://docs.djangoproject.com/en/3.1/topics/forms/modelforms/

现在你需要创建视图,它可以是这样的:

class AddReservation(CreateView):
form_class = forms.ReservationForm
success_url = reverse_lazy("")  #add relevant path
template_name = "app/reservations.html" #add relevant template name

Django将处理所有的验证。您所要做的就是创建一个模板,例如registration_form并使用{{form.as_p}}