2012-08-31 11 views
9

Estoy tratando de modelar el horario de atención durante una semana de una empresa. Aquí está mi intento:Django - Objetos para el horario comercial

class Company(models.Model): 
    name = models.CharField(max_length=100) 
    logo = models.FileField(upload_to='company_logos') 
    mon_start = models.TimeField() 
    mon_end = models.TimeField() 
    tue_start = models.TimeField() 
    tue_end = models.TimeField() 
    wed_start = models.TimeField() 
    wed_end = models.TimeField() 
    thu_start = models.TimeField() 
    thu_end = models.TimeField() 
    fri_start = models.TimeField() 
    fri_end = models.TimeField() 
    sat_start = models.TimeField() 
    sat_end = models.TimeField() 
    sun_start = models.TimeField(blank=True) 
    sun_end = models.TimeField(blank=True) 

¿Esto parece correcto?

¿No hay una forma más dinámica de definirlo?

¿Puedo validar fácilmente cada día (en un formulario)?

+1

creo que esto es una buena idea - http://stackoverflow.com/a/8128427/830941 – lyapun

+0

posible duplicado de [Cualquier existentes solución para implementar "horas de apertura" en Django] (http://stackoverflow.com/questions/8128143/any-existing-solution-to-implement-opening-hours-in-django) –

Respuesta

15

De @lyapun sugerencia, una solución aceptable para mí sería:

WEEKDAYS = [ 
    (1, _("Monday")), 
    (2, _("Tuesday")), 
    (3, _("Wednesday")), 
    (4, _("Thursday")), 
    (5, _("Friday")), 
    (6, _("Saturday")), 
    (7, _("Sunday")), 
] 


class Company(models.Model): 
    name = models.CharField(
     max_length=100 
    ) 
    logo = models.FileField(
     upload_to='company_logos' 
    ) 



class OpeningHours(models.Model): 
    store = models.ForeignKey(
     Company 
    ) 
    weekday = models.IntegerField(
     choices=WEEKDAYS, 
     unique=True 
    ) 
    from_hour = models.TimeField() 
    to_hour = models.TimeField() 
+1

Creo que quieres hacer unique_together en tienda y día de la semana, en lugar de solo entre semana. – byoungb

+0

Correcto, en realidad es 'unique_together = (día laborable, tienda)' –

+0

¿Será [1] DurationField() en Django 1.8 una alternativa mejor a to_hour? ¿Considerando que a veces la tienda puede cerrarse después de las 12:00? ¿De esta manera, el horario de cierre en cualquier día es de_hora + duración en un día específico? ¿Es este un buen enfoque? [1]: https: //docs.djangoproject.com/en/1.8/ref/models/fields/#durationfield – Pranaysharma

Cuestiones relacionadas