Проблемы с пользовательским виджетом времени - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть модель, у которой есть атрибут, на который ссылается, когда этот объект больше не будет публично доступен.

class Story(models.Model):
    ...
    deadline = models.models.DateTimeField()

То, что я хочу сделать, это предоставить пользователю возможность установить эту дату, ноочень простым и ограниченным способом.Я предоставлю на выбор 1-7 дней «активного периода».Поэтому сейчас я настраиваю пользовательскую форму следующим образом:

DAYS_CHOICES = (
    ('1', '1 day'),
    ...
    ('7', '7 days'),
)

class StoryForm(ModelForm):
    fecha_cierre = forms.TypedChoiceField(
       choices=DAYS_CHOICES, widget=forms.Select)

class Meta:
    models = Story

Проблема в том, что «1» или «7» не являются объектами даты и времени, и я действительно не знаю, где перехватитьпроцесс отправки формы, чтобы я мог изменить значение следующим образом:

datetime.datetime.now() + datetime.timedelta(days=n_days)).strftime('%Y-%m-%d %H:%M:%S')

Какой предпочтительный подход в такой ситуации?

1 Ответ

1 голос
/ 11 апреля 2011

Вам необходимо исключить deadline поле из формы и переопределить save() метод:

class StoryForm(ModelForm):

    fecha_cierre = forms.TypedChoiceField(
       choices=DAYS_CHOICES, widget=forms.Select)

    class Meta:
        models = Story
        exclude = ('deadline',)

    def save(self):
        story = super(StoryForm, self).save(commit=False)
        story.deadline = datetime.datetime.now() + \
                         datetime.timedelta(days=self.cleaned_data['fecha_cierre']))
        story.save()
        return story
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...