Django如何设置models.DateField()的日期格式?终端持续抛出日期验证错误

2024-06-16 11:19:27 发布

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

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

我的模特

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"

我的观点

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:\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()选项。如果避免与表单字段相关的建议,将不胜感激。 提前感谢各位:)


Tags: djangoinpydbmodelslibpackagesline
1条回答
网友
1楼 · 发布于 2024-06-16 11:19:27

在您的模型中有一个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

文件中的注释:

The generated Form class will have a form field for every model field specified, in the order specified in the fields attribute.

有关详细信息: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}}

相关问题 更多 >