Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:在创建对象和更新对象时,输入日期格式不同_Django_Django Forms_Django Settings - Fatal编程技术网

Django:在创建对象和更新对象时,输入日期格式不同

Django:在创建对象和更新对象时,输入日期格式不同,django,django-forms,django-settings,Django,Django Forms,Django Settings,当我创建一个对象并将日期以dd/mm/yyyy格式(这是我希望应用程序使用的格式)放入输入文本字段时,它工作正常。但是当我试图修改它时(这意味着我获得了该对象的密钥并在数据库中更新它),输入日期格式将更改为yyyy mm dd(我认为这是默认格式),并且是有效的()方法永远不会返回True。我已经做了很多工作,包括覆盖locale formats.py文件,但它仍然不起作用 这是我的settings.py: # Local time zone for this installation. Cho

当我创建一个对象并将日期以dd/mm/yyyy格式(这是我希望应用程序使用的格式)放入输入文本字段时,它工作正常。但是当我试图修改它时(这意味着我获得了该对象的密钥并在数据库中更新它),输入日期格式将更改为yyyy mm dd(我认为这是默认格式),并且
是有效的()
方法永远不会返回True。我已经做了很多工作,包括覆盖locale formats.py文件,但它仍然不起作用

这是我的settings.py:

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Caracas'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

#Path for date formats
FORMAT_MODULE_PATH  = 'config.formats'

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True
My forms.py(第一个类用于创建,第二个类用于更新/修改):

我在views.py中的创建方法:

@login_required
def crear_pizarra(request):
    """
    Metodo que crea una nueva pizarra llamando a CreadorPizarra
    """
    if request.method == 'POST':
        #solucion temporal al problema del formato de fecha
        form = CrearPizarraForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            #Variables que se pasaran al metodo CreadorPizarra
            nombrepiz = data['nombre']
            descripcionpiz = data['descripcion']
            fechaCreacion = data['fecha_creacion']
            fechaFinal = data['fecha_final']
            #Se obtiene el usuario actual para ponerlo de creador (verificar)
            usuario = request.user
            #Metodo que guarda la pizarra en la base de datos.
            CreadorPizarra(nombrepiz,descripcionpiz,fechaCreacion,fechaFinal,usuario)
            lista = obtener_pizarras(request)
            return render(request, 'app_pizarras/listar.html', { 'lista' : lista, })
        else:
            return render(request, 'app_pizarras/crear_pizarra.html',{'form': form, })

    form = CrearPizarraForm()
    return render(request, 'app_pizarras/crear_pizarra.html', { 'form': form, })
@login_required
def modificar_pizarra(request):
    """
    Metodo que sirve para modificar una pizarra de la base de datos
    """
   if request.method == 'POST':
      if request.POST.__contains__('nombre'):
          form = ModificarPizarraForm(request.POST)
            if form.is_valid():
                data = form.cleaned_data
                #Variables que se pasaran al metodo CreadorPizarra
                nombrepiz = data['nombre']
                descripcionpiz = data['descripcion']
                fechaFinal = data['fecha_final']
                #Metodo que guarda la pizarra en la base de datos.
                modificar(nombrepiz,descripcionpiz,fechaFinal,)
                lista = obtener_pizarras(request)
                return render(request, 'app_pizarras/listar.html', { 'lista' : lista, })
            else:
                print "form no valido"
                idpiz = request.POST['idpiz']
                lista = []
                lista.append(request.POST['nombre'])
                lista.append(request.POST['descripcion'])
                lista.append(request.POST['fechafinal'])
                return render(request, 'app_pizarras/modificar_pizarra.html', { 'form': form, 'idpiz' : idpiz, 'lista' : lista })
我在views.py中的修改方法:

@login_required
def crear_pizarra(request):
    """
    Metodo que crea una nueva pizarra llamando a CreadorPizarra
    """
    if request.method == 'POST':
        #solucion temporal al problema del formato de fecha
        form = CrearPizarraForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            #Variables que se pasaran al metodo CreadorPizarra
            nombrepiz = data['nombre']
            descripcionpiz = data['descripcion']
            fechaCreacion = data['fecha_creacion']
            fechaFinal = data['fecha_final']
            #Se obtiene el usuario actual para ponerlo de creador (verificar)
            usuario = request.user
            #Metodo que guarda la pizarra en la base de datos.
            CreadorPizarra(nombrepiz,descripcionpiz,fechaCreacion,fechaFinal,usuario)
            lista = obtener_pizarras(request)
            return render(request, 'app_pizarras/listar.html', { 'lista' : lista, })
        else:
            return render(request, 'app_pizarras/crear_pizarra.html',{'form': form, })

    form = CrearPizarraForm()
    return render(request, 'app_pizarras/crear_pizarra.html', { 'form': form, })
@login_required
def modificar_pizarra(request):
    """
    Metodo que sirve para modificar una pizarra de la base de datos
    """
   if request.method == 'POST':
      if request.POST.__contains__('nombre'):
          form = ModificarPizarraForm(request.POST)
            if form.is_valid():
                data = form.cleaned_data
                #Variables que se pasaran al metodo CreadorPizarra
                nombrepiz = data['nombre']
                descripcionpiz = data['descripcion']
                fechaFinal = data['fecha_final']
                #Metodo que guarda la pizarra en la base de datos.
                modificar(nombrepiz,descripcionpiz,fechaFinal,)
                lista = obtener_pizarras(request)
                return render(request, 'app_pizarras/listar.html', { 'lista' : lista, })
            else:
                print "form no valido"
                idpiz = request.POST['idpiz']
                lista = []
                lista.append(request.POST['nombre'])
                lista.append(request.POST['descripcion'])
                lista.append(request.POST['fechafinal'])
                return render(request, 'app_pizarras/modificar_pizarra.html', { 'form': form, 'idpiz' : idpiz, 'lista' : lista })
我还创建了一个配置目录,其中是formats目录,在'en'目录中包含日期格式的替代文件formats.py:

# -*- encoding: utf-8 -*-
# This file is distributed under the same license as the Django package.
#

# The *_FORMAT strings use the Django date format syntax,
# see http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
DATE_FORMAT = 'd/m/Y'
TIME_FORMAT = 'P'
DATETIME_FORMAT = 'N j, Y, P'
YEAR_MONTH_FORMAT = 'F Y'
MONTH_DAY_FORMAT = 'F j'
SHORT_DATE_FORMAT = 'd/m/Y' 
SHORT_DATETIME_FORMAT = 'm/d/Y P'
FIRST_DAY_OF_WEEK = 0 # Sunday

# The *_INPUT_FORMATS strings use the Python strftime format syntax,
# see http://docs.python.org/library/datetime.html#strftime-strptime-behavior
DATE_INPUT_FORMATS = (
            '%d/%m/%Y',  # '25/10/2006'
                # '%b %d %Y', '%b %d, %Y',            # 'Oct 25 2006', 'Oct 25, 2006'
                    # '%d %b %Y', '%d %b, %Y',            # '25 Oct 2006', '25 Oct, 2006'
                        # '%B %d %Y', '%B %d, %Y',            # 'October 25 2006', 'October 25, 2006'
                            # '%d %B %Y', '%d %B, %Y',            # '25 October 2006', '25 October, 2006'
                            )
TIME_INPUT_FORMATS = (
            '%H:%M:%S',     # '14:30:59'
                '%H:%M',        # '14:30'
                )
DATETIME_INPUT_FORMATS = (
            '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
                '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
                    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
                        '%Y-%m-%d',              # '2006-10-25'
                            '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
                                '%m/%d/%Y',              # '10/25/2006'
                                    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
                                        '%m/%d/%y %H:%M',        # '10/25/06 14:30'
                                            '%m/%d/%y',              # '10/25/06'
                                            )
DECIMAL_SEPARATOR = u','
THOUSAND_SEPARATOR = u'.'
NUMBER_GROUPING = 3

我认为Django能够识别最后一部分,因为日期是以预期的格式显示的,问题在于我更新时的输入。

我认为您的代码是正确的,请检查模板是否有错误。

尝试在ModificArpizarForm类中为DateField设置输入格式:

    fecha_final = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS)

从:

如果未提供输入格式参数,则默认输入格式为:

  • “%Y-%m-%d”,#“2006-10-25”
  • “%m/%d/%Y”,#“10/25/2006”
  • “%m/%d/%y”,“2006年10月25日”

谢谢,我解决了这个问题,而且在输入的“name”模板中也有一个错误。