模型中的 django 星期几表示

Posted

技术标签:

【中文标题】模型中的 django 星期几表示【英文标题】:django days-of-week representation in model 【发布时间】:2011-08-23 10:10:16 【问题描述】:

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

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】:

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

此代码使用多语言工具自动翻译成当地语言。

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

【讨论】:

我看到有反对者,我很好奇为什么这不能有效地回答问题。 可能是因为您正在导入 SmallIntegerField 却扩展了 models.CharField 我认为走这条路意味着javascript不会有任何额外的东西?我正在处理一周中的几天的下拉列表,我需要在渲染用户数据时按星期几对其进行排序 @abhivemp 实际上,不需要 javascript。有两个文件受到影响。 @MUYBelgium 你知道是否可以在 jinja 模板上呈现星期几的标签(例如,“星期一”)而不是“1”?如果是这样,我会怎么做?【参考方案2】:

这样的事情会奏效。

#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 

【讨论】:

我删除了我的 cmets。由于某种原因,页面存在错误,并且您的小部件部分不断消失。 啊,反正我给了你+1。很好的答案。 这只能让我设置和存储一周中的一天。我需要它来容纳多天。 :-( 在这种情况下,创建一个 Days 模型,并对其进行 M2M 字段 或者您可以尝试使用 models.MultipleChoiceField 而不是 CharField。喜欢这里:***.com/questions/746173/…【参考方案3】:

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

【讨论】:

【参考方案4】:

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

编辑:自从 bitbucket 存储库被删除后更新了 pypi 的链接。

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

【讨论】:

点击该链接时为 404 Bitbucket 链接得到 404,pypi 包自 2014 年以来没有更新 这也不行 @NobinPegasus 这是一个非常无用的评论,至少说明它为什么不起作用。如果你真的阅读了我的评论并查看了 repo,你会发现它自 2014 年以来就没有更新过......所以当然它可能不再有效

以上是关于模型中的 django 星期几表示的主要内容,如果未能解决你的问题,请参考以下文章

长理ACM 14-星期几(谌海军)

c语言编写万年历时计算每月第一天是星期几的公式是啥

javascript 从Date中获取星期几

如何从 C++ 中的 tm 对象获取星期几?

java中如何获取日期时间中的星期几?

程序读出一个表示星期几的数字(1-7),输出对应的星期字符串名称?