django days-of-week representation in model

流过昼夜 提交于 2021-02-17 09:55:57

问题


I have this "Jobs Server" model that i'm building. I want to include a field that will save which days of the week this job will run on. Ultimately in the UI, i would like the user to be able to have a series of check boxes(one for each day) that they can select. What would be the best way to represent this "days-of-week" data in my mode?

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 = ?

回答1:


If you want a checkbox for each one, then the easiest thing to do is to create BooleanFields for each of them. If you want to store it as a more complex value (eg. comma separated list or something), create your own widget and play with javascript, then you could go that route.




回答2:


You may want to create DayOfTheWeek field type, which you can improve in various ways.

This code cause to translate automatically into the local language using the multilingual tools.

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

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()
(..)



回答3:


Something like this would work.

#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 }

Or to save multiple days

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

days = models.ManyToManyField(Days)

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



回答4:


I ran into this problem and wanted to be able to select multiple days of the week. I did as was already answered by silent1mezzo

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

days = models.ManyToManyField(Days)

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

But I also thought it would be useful to provide initial data through fixtures since the days of the week won't change. I saved out the data by python manage.py dumpdata yourapp.weekday save it to a json file in the fixtures directory in my app, then load it later using python manage.py loaddata weekday_data.json




回答5:


Just implemented django-weekday-field. Works great! Hopefully this helps other people who stumble upon this question



来源:https://stackoverflow.com/questions/5966629/django-days-of-week-representation-in-model

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!