django星期几的模特代表

时间:2011-05-11 15:19:27

标签: django django-models model days

我正在构建这个“Jobs Server”模型。我想要包含一个字段,该字段将保存此作业将在一周中的哪几天运行。最终在用户界面中,我希望用户能够拥有一系列可以选择的复选框(每天一个)。在我的模式中表示这种“星期几”数据的最佳方式是什么?

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

5 个答案:

答案 0 :(得分:23)

您可能想要创建DayOfTheWeek字段类型,您可以通过各种方式进行改进。

此代码会导致使用多语言工具自动转换为本地语言。

#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 :(得分:13)

这样的事情会起作用。

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

或者保存多天

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

days = models.ManyToManyField(Days)

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

答案 2 :(得分:2)

如果您想要每个复选框,那么最简单的方法是为每个复选框创建BooleanFields。如果你想将它存储为一个更复杂的值(例如逗号分隔列表或其他东西),创建自己的小部件并使用javascript播放,那么你可以走这条路。

答案 3 :(得分:1)

刚刚实施django-weekday-field。效果很好! 希望这有助于其他偶然发现这个问题的人

答案 4 :(得分:1)

我遇到了这个问题,希望能够选择一周中的多天。我做的就像silent1mezzo已经回答的那样

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

days = models.ManyToManyField(Days)

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

但我也认为通过灯具提供初始数据会很有用,因为星期几不会改变。我通过python manage.py dumpdata yourapp.weekday将数据保存到我的应用程序的fixtures目录中的json文件中,然后使用python manage.py loaddata weekday_data.json

加载它