模型中的 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 星期几表示的主要内容,如果未能解决你的问题,请参考以下文章