django дни недели в модели - PullRequest
10 голосов
/ 11 мая 2011

У меня есть модель "сервера заданий", которую я создаю.Я хочу включить поле, которое будет сохранять дни недели, в которые будет выполняться это задание.В конечном счете, в пользовательском интерфейсе я бы хотел, чтобы у пользователя была возможность установить ряд флажков (по одному на каждый день), которые они могут выбрать.Как лучше всего представлять эти "дни недели" в моем режиме?

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 ]

23 голосов
/ 07 марта 2012

Возможно, вы захотите создать тип поля 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()
(..)
13 голосов
/ 11 мая 2011

Примерно так будет работать.

#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 голосов
/ 11 мая 2011

Если вы хотите установить флажок для каждого из них, то проще всего создать BooleanFields для каждого из них.Если вы хотите сохранить его как более сложное значение (например, список через запятую или что-то в этом роде), создайте свой собственный виджет и поиграйтесь с javascript, тогда вы можете пойти по этому пути.

1 голос
/ 25 марта 2018

Я столкнулся с этой проблемой и хотел иметь возможность выбирать несколько дней недели.Я сделал так, как уже отвечал 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, сохранил их в файл json в каталоге fixtures в моем приложении, а затем загрузил их позже, используя python manage.py loaddata weekday_data.json

1 голос
/ 01 июня 2016

Только что реализовано django-weekday-field . Работает отлично! Надеюсь, это поможет другим людям, которые сталкиваются с этим вопросом

...