Foros del Web » Programando para Internet » Python »

¿Cómo crear un "YearField" en Django?

Estas en el tema de ¿Cómo crear un "YearField" en Django? en el foro de Python en Foros del Web. Hola, ¿Alguien podría explicarme cómo crear un "YearField", es decir, un campo creado para guardar años en Django? Un saludo y gracias de antemano!...
  #1 (permalink)  
Antiguo 01/12/2013, 17:52
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 14 años, 3 meses
Puntos: 0
¿Cómo crear un "YearField" en Django?

Hola,

¿Alguien podría explicarme cómo crear un "YearField", es decir, un campo creado para guardar años en Django?

Un saludo y gracias de antemano!
  #2 (permalink)  
Antiguo 01/12/2013, 20:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: ¿Cómo crear un "YearField" en Django?

Depende.

¿Tienes un campo de con la fecha y de ahí quieres sacar el año?
Entonces simplemente haz eso. En el mejor de los casos un campo calculado.

¿Vas a guardar el día y el mes eventualmente en diferentes columnas?
Usa un DataField. Créeme guardar la fecha en 3 columnas diferentes es lo peor que puedes hacer.

¿Solamente es el año y nada mas, nada sera agregado?
PositiveIntegerField. Salvo que no se me ocurre una situación donde nada mas uses el año.

¿Eventualmente agregare tiempo, mes y día?
DateTimeField

Creo que es mejor que nos digas la situación en la que estas y nosotros te diremos cual sería la mejor opción.
  #3 (permalink)  
Antiguo 02/12/2013, 03:30
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Cómo crear un "YearField" en Django?

Muchas gracias Ricardo. El caso sería el de solamente el año. Actualmente estaba probando precisamente con el field que tú mencionas, el PositiveIntegerField.

Como la mejor opción es usar PositiveIntegerField, podrías explicarme cómo crear un nuevo field? Me gustaría crear un nuevo field que herede de PositiveIntegerField, y que además solo permita números de cuatro dígitos, es decir, hasta 9999. ¿Cómo tendría que hacer? ¿Algo así?

Código Python:
Ver original
  1. class YearField(models.PositiveSmallIntegerField):
  2.     description = _("Year")
  3.  
  4.     def get_internal_type(self):
  5.         return "YearField"
  6.  
  7.     def formfield(self, **kwargs):
  8.         defaults = {'min_value': 0, 'max_value': 9999}
  9.         defaults.update(kwargs)
  10.         return super(YearField, self).formfield(**defaults)

Última edición por abdonroda; 02/12/2013 a las 04:02
  #4 (permalink)  
Antiguo 02/12/2013, 14:43
Avatar de stormearth  
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 11 años, 2 meses
Puntos: 2
Respuesta: ¿Cómo crear un "YearField" en Django?

Yo no soy muy experimentado en Django, pero según lo que veo estas equivocado en la manera en que planteas los campos en Django. Cada clase es una tabla y dentro de la clase debes específicar los Fields. Te recomiendo que leas la [URL="https://docs.djangoproject.com/en/dev/ref/models/fields/"]documentación[/URL] de Django al respecto y si entiendes inglés veas [URL="http://www.youtube.com/playlist?list=PLxxA5z-8B2xk4szCgFmgonNcCboyNneMD"]este [/URL]tutorial es muy bueno.

.. parece q no sirve el botón de hiperlink, bueno ahi lo copias y lo pegas. espero q te ayuden.

Última edición por stormearth; 02/12/2013 a las 14:45 Razón: hiperlinks
  #5 (permalink)  
Antiguo 02/12/2013, 15:28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Cómo crear un "YearField" en Django?

Sí, lo sé, y lo que quiero hacer es crear un Field para poder usar después en los modelos. :)
  #6 (permalink)  
Antiguo 03/12/2013, 08:27
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Cómo crear un "YearField" en Django?

Tras darle vueltas, creo que esto es lo que más se ajusta:

Código Python:
Ver original
  1. class YearField(models.PositiveSmallIntegerField):
  2.     description = _("Year")
  3.  
  4.     def formfield(self, **kwargs):
  5.         defaults = {'max_value': 9999, 'min_value': 0}
  6.         defaults.update(kwargs)
  7.         return super(YearField, self).formfield(**defaults)

Permitirá introducir un integer desde el 0 hasta el 9999, años de sobra.

Etiquetas: django
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 06:17.