Foros del Web » Programando para Internet » Python »

Usar Unix Timestamp con DateField

Estas en el tema de Usar Unix Timestamp con DateField en el foro de Python en Foros del Web. Buenas gente, soy nuevo en el uso de Django, y tengo una duda, actualmente tengo mi sitio en PHP, y estoy tratando de hacer algunas ...
  #1 (permalink)  
Antiguo 25/10/2012, 23:20
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 8 meses
Puntos: 5
Usar Unix Timestamp con DateField

Buenas gente, soy nuevo en el uso de Django, y tengo una duda, actualmente tengo mi sitio en PHP, y estoy tratando de hacer algunas cosas con python usando la misma base de datos.

Actualmente, en PHP guardo las fechas en el formato Unix (date(U)), y cuando los muestro, los traduzco al formato que se usa comunmente.

Ahora necesito saber como hago esto en django, traté usando DateField
así lo tengo en mi models.py

Código:
	fecha = models.DateField()
y en settings.py puse
Código:
DATE_FORMAT = "U"
DATE_INPUT_FORMATS = ("%s",)
Pero igual, solo me lo guarda en formato DD-MM-AAAA

¿como podría hacer para que se guarde en el formato unix? y despues... ¿ para convertirlo para verlo en la plantilla?

Desde ya muchas gracias !!
  #2 (permalink)  
Antiguo 26/10/2012, 07:56
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Usar Unix Timestamp con DateField

DATE_FORMAT es para cuando necesitas mostrar una fecha, no afecta cómo se guarda (por lo que probablemente te sirva para mostrar el timestamp en tus plantillas)

DATE_INPUT_FORMATS es para aceptar diferentes formatos en campos que mapean a fechas, tampoco afecta cómo se guarda.

Yo diría que vayas por la solución simple: si aún necesitas que Django y PHP utilicen la misma BBDD, haz que Django maneje ese campo como un campo entero, y convierte los valores a fechas cuando sea necesario.

Quizás te sirva esto: http://ianrolfe.livejournal.com/36017.html

No debería haber necesidad de guardar un timestamp en una base de datos, los tipos de datos específicos para fecha/hora son más apropiados.
  #3 (permalink)  
Antiguo 26/10/2012, 08:42
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 8 meses
Puntos: 5
Respuesta: Usar Unix Timestamp con DateField

Cita:
Iniciado por AlvaroG Ver Mensaje
DATE_FORMAT es para cuando necesitas mostrar una fecha, no afecta cómo se guarda (por lo que probablemente te sirva para mostrar el timestamp en tus plantillas)

DATE_INPUT_FORMATS es para aceptar diferentes formatos en campos que mapean a fechas, tampoco afecta cómo se guarda.

Yo diría que vayas por la solución simple: si aún necesitas que Django y PHP utilicen la misma BBDD, haz que Django maneje ese campo como un campo entero, y convierte los valores a fechas cuando sea necesario.

Quizás te sirva esto: http://ianrolfe.livejournal.com/36017.html

No debería haber necesidad de guardar un timestamp en una base de datos, los tipos de datos específicos para fecha/hora son más apropiados.
Muchas gracias, ya habia probado ese link, pero me sale el siguiente error:

Código:
AttributeError at /admin/principal/artista/47/
'unicode' object has no attribute 'tzinfo'
  #4 (permalink)  
Antiguo 26/10/2012, 09:44
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Usar Unix Timestamp con DateField

Seguramente te está llegando una cadena a alguna parte de tu código donde esperas un objeto datetime
  #5 (permalink)  
Antiguo 26/10/2012, 09:47
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Usar Unix Timestamp con DateField

¿Puedes poner el schema de la tabla donde estas guardando la fecha?
  #6 (permalink)  
Antiguo 26/10/2012, 11:13
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 8 meses
Puntos: 5
Respuesta: Usar Unix Timestamp con DateField

asi es la estructura de la db

Código:
CREATE TABLE IF NOT EXISTS `bandas` (
  `id` int(11) NOT NULL auto_increment,
  `nombre` varchar(64) NOT NULL,
  `bio` mediumtext NOT NULL,
  `urltag` varchar(64) NOT NULL,
  `fecha_creado` text NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `urltag` (`urltag`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=50 ;
y este es mi models.py

Código:
from django.db import models
from datetime import datetime
from time import strftime

class UnixTimestampField(models.DateTimeField):

    def __init__(self, null=False, blank=False, **kwargs):
        super(UnixTimestampField, self).__init__(**kwargs)
        # default for TIMESTAMP is NOT NULL unlike most fields, so we have to
        # cheat a little:
        self.blank, self.isnull = blank, null
        self.null = True # To prevent the framework from shoving in "not null".
        
    def db_type(self):
        typ=['TIMESTAMP']
        # See above!
        if self.isnull:
            typ += ['NULL']
        if self.auto_created:
            typ += ['default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP']
        return ' '.join(typ)
    
    def to_python(self, value):
        return datetime.from_timestamp(value)
    
    def get_db_prep_value(self, value):
        if value==None:
            return None
        return strftime('%Y%m%d%H%M%S',value.timetuple())




class Artista(models.Model):
	nombre = models.CharField(max_length=50)
	bio = models.TextField()
	fecha_creado = UnixTimestampField(null=True, blank=True)
	urltag = models.CharField(max_length=255)

	class Meta:
		db_table = 'bandas'

	def __unicode__(self):
		return self.nombre
Muchas gracias desde ya !
  #7 (permalink)  
Antiguo 27/10/2012, 18:16
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Usar Unix Timestamp con DateField

En vez de tener
Código:
`fecha_creado` text NOT NULL,
Deberías de tener
Código:
`fecha_creado` datetime NOT NULL,
  #8 (permalink)  
Antiguo 27/10/2012, 22:39
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 8 meses
Puntos: 5
Respuesta: Usar Unix Timestamp con DateField

Cita:
Iniciado por razpeitia Ver Mensaje
En vez de tener
Código:
`fecha_creado` text NOT NULL,
Deberías de tener
Código:
`fecha_creado` datetime NOT NULL,
Pero si lo voy a volver a la fecha UNIX, que son solo numeros, en php me funciona bien, acá tendria que tenerlo en datetime ?
  #9 (permalink)  
Antiguo 28/10/2012, 14:41
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 8 meses
Puntos: 5
Respuesta: Usar Unix Timestamp con DateField

Bueno, empecé de nuevo con otra tabla de la DB, dejando que cree los campos django.

Ahora al crearlo me sale este error:

Código:
type object 'datetime.datetime' has no attribute 'from_timestamp'
  #10 (permalink)  
Antiguo 28/10/2012, 19:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Usar Unix Timestamp con DateField

Ahora no se como esta tu esquema, pero otra cosa que pudiste haber hecho fue hacer tu clase Propia, pero en lugar de extender de models.DateTimeField extender de models.TextField y solamente añadirle un método (o modificar la clase) para que regrese un objeto datetime y no un string.

Otra cosa es que no existe el metodo 'from_timestamp' se llama 'fromtimestamp'.
  #11 (permalink)  
Antiguo 29/10/2012, 01:08
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 8 meses
Puntos: 5
Respuesta: Usar Unix Timestamp con DateField

Cita:
Iniciado por razpeitia Ver Mensaje
Ahora no se como esta tu esquema, pero otra cosa que pudiste haber hecho fue hacer tu clase Propia, pero en lugar de extender de models.DateTimeField extender de models.TextField y solamente añadirle un método (o modificar la clase) para que regrese un objeto datetime y no un string.

Otra cosa es que no existe el metodo 'from_timestamp' se llama 'fromtimestamp'.
Al final me dí cuenta que lo mejor que podría hacer es solo usar el DateTimeField y después convertirlo a Unix Timestamp, como podría hacer esto último? convertir desde el DateTimeField al modo de fecha Unix Timestamp?

Muchas gracias desde ya !
  #12 (permalink)  
Antiguo 30/10/2012, 10:04
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Usar Unix Timestamp con DateField

Cita:
Iniciado por PoLiZe Ver Mensaje
[...] como podría hacer esto último? convertir desde el DateTimeField al modo de fecha Unix Timestamp? [...]
La manera más sencilla sería algo como esto:

Código Python:
Ver original
  1. from django.utils.dateformat import format
  2. print format(modelo.campofecha, 'U')

Aunque si lo requieres en una template lo mejor sea el filtro date:
Código Python:
Ver original
  1. {{ fecha|date:"U" }}


Saludos
__________________
Grupo Telegram Docker en Español

Etiquetas: datefield, django, timestamp, unix, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:15.