Separa Fecha y Hora en dos inputs utilizando ModelsForm

43 views
Skip to first unread message

Tatiana Mesa

unread,
Jan 23, 2020, 2:57:47 PM1/23/20
to django...@googlegroups.com
Buenas tardes comunidad,

He empezado a trabajar con vistas basadas en clases en Django y tengo una pequeña complicación.

Quisiera saber de que forma puedo separar un campo fecha (DateTimeField), en un input la feha y en otro input la hora en una vista de HTML.



Tengo en mi modelo un campo de Fecha
image.png
 Y tengo un formulario para realizar updates
image.png

Les agradezco mucho sus respuestas.



DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 5:20:36 PM1/23/20
to Django users
Tienes date and time field

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAHAr%3D_3CbZXT9x_NXQ-MJH8U3tJz7JEJj3-JxBuBx_s7JxUwqQ%40mail.gmail.com.

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 5:26:26 PM1/23/20
to Django users

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 5:27:25 PM1/23/20
to Django users

Tatiana Mesa

unread,
Jan 23, 2020, 6:38:16 PM1/23/20
to django...@googlegroups.com
Hola Daniel, gracias por la rápida respuesta

Tengo el campo DateTimeField que trae la fecha y la hora en el mismo campo. Quiero separarlos solo en la vista del Html. Sin modificar el tipo de dato.

Agradezco tu respuesta.

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 8:24:46 PM1/23/20
to Django users
Create un tag template espera te mando doc

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 8:28:48 PM1/23/20
to Django users
https://docs.djangoproject.com/en/3.0/howto/custom-template-tags/
mira bien aqui tu pudes facbicarte uno para separara la hora y la devuelves a la vista en tiempo de ejecucion osea cuando se renderiza tu pagina creas un archivo y lo instancias {% tag_template_name  args kwars %} puedes tomar el string y devover lo que quieras que se renderize


un ujeplo de archivo

from django import template
from django.utils import timezone
from datetime import timedelta, date
register = template.Library()

@register.filter
def to_and(value):
value = str(value)
return value.replace(",",".")



@register.filter
def many_days(value):
today = timezone.localtime()
fecha = value - today
if fecha.days >= 0:
if fecha.days == 0:
fecha = 'Llegan Hoy'
else:
fecha = "Quedan :"+str(fecha.days)+' Dias y '+str(((str(fecha).split(','))[1].split('.')[0]))+" h/mm"
else:
fecha = value
return fecha

Tatiana Mesa

unread,
Jan 23, 2020, 8:31:32 PM1/23/20
to django...@googlegroups.com
Gracias Daniel, me seria muy útil un ejemplo.

Tatiana Mesa

unread,
Jan 23, 2020, 8:57:11 PM1/23/20
to django...@googlegroups.com
Si Daniel, pero como lo dije en un principio, estoy utilizando Vistas basadas en clases. Porque es mas fácil realizar un UPDATE.

Este es mi archivo de forms.py
image.png

Esta es la vista, aquí envió el formulario
image.png



Y lo visualizo así en el HTML

image.png

Y se ve de esta manera
image.png


No se si directamente en el template, como lo estoy manejando, se puede dividir el mismo formulario. 

Y quede la fecha y la hora
image.png
Agradecería mucho tu respuesta, porque quiazas este buscando algo que no se pueda realizar con los formularios de Django.

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 11:04:16 PM1/23/20
to Django users
da igual que tipo de clase o funcion  te de la vista o template esto pasa en tiempo de renderizacion asi que si solo lo quieres mostrar te vale ahora si lo que quieres en es tiempo de procesamiento de esos datos hazlo en la clase 

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 11:06:39 PM1/23/20
to Django users
puedes usar directo en el template lee la documentacion o yo no entiendo lo que quieres hacer si es separa una cadena es muy basico tiene que saber partir un string de miles de formas o al menos 2 hahah

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 11:09:03 PM1/23/20
to Django users
<p class="card-text">{{tk.date|many_days}}</p>
un pequeño caso de uso le paso una fecha devuelvo cuantos dias pero podria devolver lo que me diera la gana al igual que usted

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 11:09:07 PM1/23/20
to Django users
se lo escribo por usted hahahah deme su ip 

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 11:11:21 PM1/23/20
to Django users
no tiene nada que ver que uses un vista basada en  clases o funciones eso no te afecta si lo que quiere es mostrar la hora como tu quieras

DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 11:23:30 PM1/23/20
to Django users
ejemplo de como trapichear un form en una CVB 

ahi hay miles ñongas hechas 


class ClientView(CreateView):
activate('es')
model = Client
form_class = ClientForm
template_name = 'clientes/clientes.html'

def get(self, request, *args, **kwargs):

self.object = None
return super().get(request, *args, **kwargs)

def get_context_data(self, **kwargs):

intr = _('Fill field before continuing')
mail = _('Fill a valid email address')
chk = _('Fill one of the checkbox to a valid state')
dat = _('Please Choose a date')

company = ''
if self.kwargs['company']:
company = self.kwargs['company']

#if company no exist, do not continue
get_object_or_404(GrupoViviendas, nombre__icontains=company)
if Department.objects.filter(grupo_o_administrador__nombre__icontains=company).exists():
company = Department.objects.filter(grupo_o_administrador__nombre__icontains=company)[0].grupo_o_administrador.nombre
grupo = GrupoViviendas.objects.get(nombre__icontains=company)

departments = Department.objects.filter(
grupo_o_administrador__nombre=company).order_by('nombre')

self.extra_context = {"department_list": departments,
'company': company, "introduce": intr,
"mail": mail, "check": chk, "dat": dat }
else:
departments = [{'nombre': 'Vacios'}]
self.extra_context = {"department_list": departments,
'company': company, "introduce": intr,
"mail": mail, "check": chk, "dat": dat }

if 'form' not in kwargs:
kwargs['form'] = self.get_form()
return super().get_context_data(**kwargs)

def form_valid(self, form):
"""If the form is valid, save the associated model."""
# print('casas', form.data['client_house'])
self.object = form.save()
return super().form_valid(form)

# cambiamos algo de info antes de serializar el formulario
def post(self, request, *args, **kwargs):
departement = ''
request.POST._mutable = True
company = self.kwargs['company']
company = GrupoViviendas.objects.get(nombre__icontains=company)
depa = company.company_related.all()


if request.POST['client_house']:
for dep in depa:
print('introducido',str(request.POST['client_house']).lower())
print('iterador',str(dep.nombre).lower())
if str(request.POST['client_house']).lower() in str(dep.nombre).lower() :
departement = dep.nombre
print("departamento", departement)
dp = get_object_or_404(Department, nombre=departement)
request.POST['client_house'] = dp.id

self.object = None
return super().post(request, *args, **kwargs)

def form_invalid(self, form):
"""If the form is invalid, render the invalid form."""
if not form.is_valid():
messages.error(self.request, 'Form invalid.')

return self.render_to_response(self.get_context_data(form=form))

def get_success_url(self):
self.object.client_code_language = self.request.LANGUAGE_CODE
self.object.save()
handler = HandlerTicket(self.object)
sn = handler.get_sn()
company = self.kwargs['company']
pk = self.object.id

return reverse_lazy('clientes:review_reserva', args=[pk, company])



def review_ticket_by_client(request, pk, company):
""" Render review form with data of rate """
client = Client.objects.filter(pk=pk)[0]
result = serialize('json', TService.objects.filter(client=client.pk))
# result = TService.objects.filter(client=client.pk)
debug = settings.DEBUG
key = settings.STRIPE_PUBLISHABLE_KEY
tickets = client.get_tkclient.all()
trip_ida = 0
trip_vuelta = 0
tarifas_depto = client.client_house.tarifa
for tk in tickets:
if tk.car_type == 'Turismo':
if tk.tstate == 'ida':
trip_ida += tarifas_depto.precio_turismo
else:
trip_vuelta += tarifas_depto.precio_turismo

if tk.car_type == 'Turismo XL':
if tk.tstate == 'ida':
trip_ida += tarifas_depto.precio_turismo
else:
trip_vuelta += tarifas_depto.precio_turismo

if tk.car_type == 'Minivan':
if tk.tstate == 'ida':
trip_ida += tarifas_depto.precio_minivan
else:
trip_vuelta += tarifas_depto.precio_minivan
total_trip = trip_ida + trip_vuelta
return render(request, 'clientes/data_confir.html', {'total_trip': total_trip,
'trip_ida': trip_ida,
'trip_vuelta': trip_vuelta,
'client': client,
'company': company,
'debug': debug,
'result': result,
'key': key })


DANIEL URBANO DE LA RUA

unread,
Jan 23, 2020, 11:23:57 PM1/23/20
to Django users
y esta pagina devberia se la biblia para ti https://ccbv.co.uk/ hahaha

Tatiana Mesa

unread,
Jan 24, 2020, 2:01:54 AM1/24/20
to django...@googlegroups.com
Gracias por tu explicación Daniel, si me queda claro que tratas de filtrar el dato en los templates con los filters que ofrece Django.

Pero aun así el dato que envió por el context es la estructura de un formulario, no un dato limpio(como una fecha)
image.png

Por lo cual en el template no puedo aplicar un filter a un formulario
image.png

No se si aun me sigo equivocando, y los filters se pueden utilizar con estructuras de formulario. De lo contrario ¿cual seria tu recomendación?

Te lo agradezco mucho Daniel, por tu paciencia :) 

Tatiana Mesa

unread,
Jan 24, 2020, 2:29:28 AM1/24/20
to django...@googlegroups.com
Encontre una manera sacando el valor del formulario y aplicando el filtro
image.png
Pero ya no quedaria en el un input si el usuario quiere realizar el update :(

image.png
Reply all
Reply to author
Forward
0 new messages