представление дней недели django в модели

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

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 ответов


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


вы можете создать тип поля 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()
(..)

что-то вроде этого будет работать.

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

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


я столкнулся с этой проблемой и хотел бы иметь возможность выбрать несколько дней недели. Я сделал так, как уже ответил 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