首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -如何为models.DateField()设置日期格式?终端一直抛出日期验证错误

Django -如何为models.DateField()设置日期格式?终端一直抛出日期验证错误
EN

Stack Overflow用户
提问于 2020-08-08 05:04:31
回答 1查看 386关注 0票数 0

我找不到改变models.Datefield()格式的方法。我的应用程序接受用户以"%m%d%YY“格式输入的日期。是否可以更改Datefield() django模型的日期格式?请帮帮忙

我的models.py

代码语言:javascript
复制
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"

我的views.py

代码语言:javascript
复制
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')

迁移文件

代码语言:javascript
复制
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',
            },
        ),
    ]

终端错误信息:

代码语言:javascript
复制
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\OneDrive - CACTUS\My Documents\GitHub\Libbys_restaurant\booktable\views.py", line 14, in reservation
    object.save()
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\base.py", line 745, in save
    self.save_base(using=using, force_insert=force_insert,
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\base.py", line 782, in save_base
    updated = self._save_table(
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\base.py", line 887, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\base.py", line 924, in _do_insert
    return manager._insert(
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\query.py", line 1204, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\sql\compiler.py", line 1391, in execute_sql
    for sql, params in self.as_sql():
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\sql\compiler.py", line 1334, in as_sql
    value_rows = [
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\sql\compiler.py", line 1335, in <listcomp>
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\sql\compiler.py", line 1335, in <listcomp>
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\sql\compiler.py", line 1276, in prepare_value
    value = field.get_db_prep_save(value, connection=self.connection)
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\fields\__init__.py", line 821, in get_db_prep_save
    return self.get_db_prep_value(value, connection=connection, prepared=False)
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\fields\__init__.py", line 1220, in get_db_prep_value
    value = self.get_prep_value(value)
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\fields\__init__.py", line 1215, in get_prep_value
    return self.to_python(value)
  File "C:\Users\libin.thomas\Envs\freelancing\lib\site-packages\django\db\models\fields\__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()选项。如果避免与Forms字段相关的建议,将不胜感激。谢谢各位:)

EN

回答 1

Stack Overflow用户

发布于 2020-08-08 05:11:58

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

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

代码语言:javascript
复制
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

文件说明:

生成的表单类将按照字段属性中指定的顺序,为指定的每个模型字段设置一个表单字段。

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

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

代码语言:javascript
复制
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}}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63312011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档