widget de fecha en mi formulario

2,261 views
Skip to first unread message

msmtotti

unread,
Feb 17, 2009, 3:21:47 PM2/17/09
to Django-es
Hola que tal,
Me podrian ayudar a meter un widget de fecha en mi formulario??, este
es el codigo
******************
class EstatusForm(forms.Form):
estatus = forms.ChoiceField(choices=Estatus.objects.values_list
('id','estatus'),widget=forms.RadioSelect, required=True)
llamar_mas_tarde = forms.DateTime()
*********************
Lo que pasa es que en " llamar_mas_tarde = forms.DateTime()", me pone
un campo de texto y lo que quiero es que me pinte como en el "admin"
un boton de fecha para que el usuario solo le de click en el dia que
quiere que le llamen

Gracias

Diego Andrés Sanabria Martin (diegueus9)

unread,
Feb 17, 2009, 3:27:21 PM2/17/09
to djan...@googlegroups.com
2009/2/17 msmtotti <miguel.so...@gmail.com>:
Debes incluir los javascript del admin:

http://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form

>
> Gracias
> >
>



--
Diego Andrés Sanabria
Ingeniería de Sistemas Universidad Distrital
blog trágico mágico cómico musical: http://diegueus9.blogspot.com
blog geek: http://pyautoservicio.blogspot.com
cel 3015290609

http://www.el-directorio.org/Diegueus9
El sitio de linux y el Software Libre en Colombia

"Hay pecados cuya fascinación está más en el recuerdo que en la
comisión de ellos." Oscar Wilde

nadia castro

unread,
Feb 17, 2009, 6:44:34 PM2/17/09
to djan...@googlegroups.com
Hola a todos yo tengo el mismo problema mi formulario es este:

from django.contrib.admin import widgets

class Fecha(ModelForm):
    fecha_inicio = forms.DateField(widget=widgets.AdminDateWidget)
    fecha_final = forms.DateField(widget= widgets.AdminDateWidget())

    class Media:
        js = ('/media/js/calendar.js',
              '/media/js/DateTimeShortcuts.js',)

En mi template tengo lo siguiente:
{% block body  %}
<form action="." method="post" enctype="multipart/form-data">
<link href="/media/css/forms.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="../../../jsi18n/"></script>
<script type="text/javascript" src="/media/admin/js/core.js"></script>
<script type="text/javascript" src="/media/admin/js/calendar.js"></script>
<script type="text/javascript" src="/media/admin/js/admin/DateTimeShortcuts.js"></script>
<table>
<br><br>
{{ form }}
<br><br>
</table>
<br><br>
<input type="submit" value="Cargar" />
</form>
{% endblock %}

Pero no logro mostrar el calendario, alguien sabe si me falta o algo o que estoy haciendo mal para que me muestre el calendario en mi formulario.

Espero me puedan ayudar me urge :S:S:S.

Gracias

MartinBorthiry

unread,
Feb 18, 2009, 7:28:31 AM2/18/09
to Django-es
Buenas:
por lo que veo tenes un error en:
fecha_inicio = forms.DateField(widget=widgets.AdminDateWidget)

, debería ser :
fecha_inicio = forms.DateField(widget=widgets.AdminDateWidget())

De todos modos yo revisaría primero si te carga bien los JS, podes
mirarlo con el firebug...

nadia castro

unread,
Feb 18, 2009, 11:21:10 AM2/18/09
to djan...@googlegroups.com
El 18 de febrero de 2009 6:28, MartinBorthiry <martin....@gmail.com> escribió:

Buenas:
 por lo que veo tenes un error en:
  fecha_inicio = forms.DateField(widget=widgets.AdminDateWidget)

, debería ser :
 fecha_inicio = forms.DateField(widget=widgets.AdminDateWidget())

 De todos modos yo revisaría primero si te carga bien los JS, podes
mirarlo con el firebug...



Pues he hecho el cambio que me dijiste y no salio, entonces revise en el firebug y al parecer no me los carga y me manda estos errores

gettext is not defined
monthsOfYear: gettext('January Febru... October November December').split(' '),
calendar.js (línea 26)
gettext is not defined
today_link.appendChild(document.createTextNode(gettext('Today')));

podrias decirme que es lo que tengo que hacer para que me muestre los js

Gracias
 

Esau Rodriguez

unread,
Feb 18, 2009, 11:48:55 AM2/18/09
to djan...@googlegroups.com
Seguramente no te esté cargando el jsi18n.js. La ruta relativa no
sirve. Si no estoy equivocado aunque pongas la ruta bien solo te
valdría si el usuario es staff. Lo que yo hice fue añadir una nueva
url al urls.py para servir este fichero. Esto en desarrollo claro. Se
supone que con la aplicación desplegada tendrías que servir este
fichero desde el servidor web.

2009/2/18 nadia castro <nadiac...@gmail.com>:
>
>
> El 18 de febrero de 2009 6:28, MartinBorthiry <martin....@gmail.com>
> escribió:
>>
>> Buenas:
>> por lo que veo tenes un error en:
>> fecha_inicio = forms.DateField(widget=widgets.AdminDateWidget)
>>
>> , debería ser :
>> fecha_inicio = forms.DateField(widget=widgets.AdminDateWidget())
>>
>> De todos modos yo revisaría primero si te carga bien los JS, podes
>> mirarlo con el firebug...
>>
>>
>
> Pues he hecho el cambio que me dijiste y no salio, entonces revise en el
> firebug y al parecer no me los carga y me manda estos errores
>
> gettext is not defined
> monthsOfYear: gettext('January Febru... October November December').split('
> '),
> calendar.js (línea 26)
> gettext is not defined
> today_link.appendChild(document.createTextNode(gettext('Today')));
>
> podrias decirme que es lo que tengo que hacer para que me muestre los js
>
> Gracias
>
>
> >
>



--
Esaú Rodríguez
esa...@gmail.com

MartinBorthiry

unread,
Feb 19, 2009, 12:03:00 PM2/19/09
to Django-es
es he hecho el cambio que me dijiste y no salio, entonces revise en el
> firebug y al parecer no me los carga y me manda estos errores
>
> gettext is not defined
> monthsOfYear: gettext('January Febru... October November December').split('
> '),
> calendar.js (línea 26)
> gettext is not defined
> today_link.appendChild(document.createTextNode(gettext('Today')));
>
> podrias decirme que es lo que tengo que hacer para que me muestre los js

Como te indica Esau el problema es que no te carga jsi18n.js, podrías
hacer algo como:

urlpatterns = patterns('',
(r'^jsi18n/(?P<packages>\S+?)/$',
'django.views.i18n.javascript_catalog'),
)

te recomiendo leer esto donde lo explica :
http://docs.djangoproject.com/en/dev/topics/i18n/?from=olddocs#translations-and-javascript

suerte

nadia castro

unread,
Feb 20, 2009, 12:13:11 PM2/20/09
to djan...@googlegroups.com

Gracias voy a checar el link y despues les comento como me fue, espero se solucione el problema, gracias por sus comentarios

nadia castro

unread,
Feb 23, 2009, 1:15:29 PM2/23/09
to djan...@googlegroups.com


2009/2/20 nadia castro <nadiac...@gmail.com>


Cheque la informacion, pero no logre mostrar el calendario, y por falta de tiempo la hago manual, bueno eso ya kedo bien, solo que ahora tengo un problema, cuando valido mis fechas, quisiera que me saliera un mensaje de error asi que utilizo la propiedad error_message, el problema es que al momente de darle click a mi boton si la fecha es incorrecta en ves de mostrarme el formulario lo que hace es refrescar mi formulario y a mi me gustaria que me mostrara mi error espero me puedan ayudar.

Este es mi formulario

class CampanaForm(ModelForm):

    fecha_inicio= forms.DateTimeField(help_text=u'Año-Mes-Dia Hora:Minutos', widget=forms.TextInput(attrs={'class': 'in_text_big','size':'200'}), input_formats=['%Y-%m-%d %H:%M'], error_messages={'required': 'Fecha invalida: La fecha debe ser mayor a la fecha actual'})
    fecha_final= forms.DateTimeField(help_text=u'Año-Mes-Dia Hora:Minutos', widget=forms.TextInput(attrs={'class':'in_text_big','size':'200'}), input_formats=['%Y-%m-%d %H:%M'], error_messages={'required': 'Fecha invalida: La fecha debe ser mayor a la fecha'})

    class Meta:
        model = Campana
        exclude = ('activa')

Mi vista.

def wizard(request):
    if request.method == 'POST':
        form = CampanaForm(request.POST)
        if form.is_valid():
                if (datetime.datetime.now().__str__() < request.session['fecha_inicio']) and (request.session['fecha_inicio'] < request.session['fecha_final']):
                    return HttpResponseRedirect('/proyectos/wizard/estado/'+subproyecto+'/'+tipo+'/')
                else:
                    form = CampanaForm()
                    return render_to_response('proyectos/done.html', {'form': form,})
    else:
        form = CampanaForm()
       
    return render_to_response('proyectos/done.html', {
        'form': form, 'usuario': request.session['usuario'],'nombre':request.session['nombre']})


Espero que alguien sepa por que me refresca mi formulario,
Gracias a todos por su ayuda
   



 

MartinBorthiry

unread,
Feb 24, 2009, 8:19:48 AM2/24/09
to Django-es
La forma correcta de validar campos de un form en djnago es definiendo
los metodos clean_field en la clase form que definas. De esa forma
cuando pones form.is_valid() realiza la validacion de todos los campos
y agrega los errores que correspondan. Y sobre todo quedan mas limpias
las vistas.

lee esto: http://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute

Otra cosa: la forma de recuperar los campos que te han enviado en el
formulario es : request.POST.get('fecha_inicio') y no request.session
['fecha_inicio'] ... ojo porque son dos cosas diferentes.

Suerte.

Martin

nadia castro

unread,
Feb 24, 2009, 2:18:28 PM2/24/09
to djan...@googlegroups.com


Gracias Martin, lo he intentado como tu dices pero sigue igual, andaba intentado tambien algo que vi en la documentacion que es poner forms.errors, al hacer esto ya no me refresca la pantalla, pero no me manda el mensaje de error, como puedo mostrarlo??????

No se si puedan ponerme algun ejemplo porfa.

Reply all
Reply to author
Forward
0 new messages