django 模型中的星期几表示

问题描述 投票:0回答:4

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

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 = ?
django django-models model days
4个回答
26
投票

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

这将使用多语言工具自动翻译成当地语言。

#myFields.py
from django.utils.translation import gettext 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()
(..)

23
投票

这样的东西会起作用。

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

4
投票

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


0
投票

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

编辑:更新了 pypi 的链接,因为 bitbucket 存储库已被删除。

它自 2014 年以来就没有更新过,但查看代码是开始回答这个问题的好方法

© www.soinside.com 2019 - 2024. All rights reserved.