Пользовательский виджет с пользовательским значением в админке Django - PullRequest
0 голосов
/ 11 марта 2012

В модели у меня есть целочисленное поле. Значение этого поля "число дней с 1.1.1970", поэтому я хотел отобразить его в интерфейсе администратора как дату, используя AdminDateWidget, чтобы упростить выбор даты.

Моя единственная идея - создать новый виджет для перевода целого числа в дату:

class ExpireWidget(AdminDateWidget):
    def render(self, name, value, attrs=None):
        if isinstance(value, (int, long)):
            value = datetime.date(1970, 1, 1) + datetime.timedelta(value)
        return super(ExpireWidget, self).render(name, value, attrs)

И следующий код в admin.py:

class LdapUserAdminForm(forms.ModelForm):
    class Meta:
        widgets = {
            'shadow_expire': ExpireWidget
            }

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

Как мне перевести дату в int перед проверкой?

1 Ответ

1 голос
/ 12 марта 2012

Каждый виджет имеет метод для получения данных обратно из POST / GET и перевода этих данных для проверки формы.

Это метод def value_from_datadict(self, data, files, name)

Вы можете увидеть его здесь: Псевдоформа в админке Django, которая генерирует объект json при сохранении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...