Django管理员中具有自定义值的自定义小部件

时间:2012-03-11 16:23:16

标签: django django-admin django-validation

在模型中我有整数字段。此字段的值的含义是“自1970年1月1日以来的天数”,因此我希望使用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 个答案:

答案 0 :(得分:1)

每个小部件都有从POST / GET获取数据并翻译该数据以进行表单验证的方法。

这是方法def value_from_datadict(self, data, files, name)

您可以在此处看到它:Pseudo-form in Django admin that generates a json object on save