2011-05-11 30 views
7

Tengo este modelo de "Servidor de trabajos" que estoy construyendo. Quiero incluir un campo que ahorrará los días de la semana en que se ejecutará este trabajo. En última instancia, en la interfaz de usuario, me gustaría que el usuario pueda tener una serie de casillas de verificación (una para cada día) que pueden seleccionar. ¿Cuál sería la mejor manera de representar estos datos de "días de la semana" en mi modo?django representación de días de la semana en el modelo

class Job(models.Model): 
    name = models.CharField(max_length=32, unique=True) 
    package = models.ForeignKey(Package) 
    binary = models.ForeignKey(Binary) 
    host = models.ForeignKey(Host) 
    colo = models.ForeignKey(Location) 
    group = models.ForeignKey(Group) 
    type = models.ForeignKey(Type) 
    start = models.TimeField() 
    end = models.TimeField() 
    days = ? 

Respuesta

2

Si desea una casilla de verificación para cada uno, entonces la cosa más fácil de hacer es crear BooleanFields para cada uno de ellos. Si desea almacenarlo como un valor más complejo (por ejemplo, una lista separada por comas o algo así), cree su propio widget y juegue con javascript, entonces podría ir por esa ruta.

11

Algo como esto funcionaría.

#models.py 
DAYS_OF_WEEK = (
    (0, 'Monday'), 
    (1, 'Tuesday'), 
    (2, 'Wednesday'), 
    (3, 'Thursday'), 
    (4, 'Friday'), 
    (5, 'Saturday'), 
    (6, 'Sunday'), 
) 

days = models.CharField(max_length=1, choices=DAYS_OF_WEEK 

#forms.py 
widgets = { 'days': forms.CheckboxSelectMultiple } 

o para guardar varios días

#models.py 
class Days(models.Model): 
    day = models.CharField(max_length=8) 

days = models.ManyToManyField(Days) 

#forms.py 
widgets = { 'days': forms.CheckboxSelectMultiple } 
+0

He eliminado mis comentarios. Por alguna razón, hay un error en la página y tu parte del widget sigue desapareciendo. –

+0

Lo edité una vez para arreglar algo. – silent1mezzo

+0

Ah, de todos modos te di un +1. Buena respuesta. –

20

Es posible que desee crear el tipo de campo DayOfTheWeek, que puede mejorar de varias maneras.

Este código causa la traducción automática al idioma local utilizando las herramientas multilingües.

#myFields.py 
from django.utils.translation import ugettext as _ 
from django.db.models import SmallIntegerField 

DAY_OF_THE_WEEK = { 
    '1' : _(u'Monday'), 
    '2' : _(u'Tuesday'), 
    '3' : _(u'Wednesday'), 
    '4' : _(u'Thursday'), 
    '5' : _(u'Friday'), 
    '6' : _(u'Saturday'), 
    '7' : _(u'Sunday'), 
} 

class DayOfTheWeekField(models.CharField): 
    def __init__(self, *args, **kwargs): 
     kwargs['choices']=tuple(sorted(DAY_OF_THE_WEEK.items())) 
     kwargs['max_length']=1 
     super(DayOfTheWeekField,self).__init__(*args, **kwargs) 

#models.py 
import myFields 
(..) 
    dayOfTheWeek = myFields.DayOfTheWeekField() 
(..) 
1

Acaba de implementar django-weekday-field. ¡Funciona genial! Esperemos que esto ayude a otras personas que tropiecen con esta pregunta

+0

¿Puede haber algunos enlaces al código fuente? –

Cuestiones relacionadas