在模型中我有整数字段。此字段的值的含义是“自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?
答案 0 :(得分:1)
每个小部件都有从POST / GET获取数据并翻译该数据以进行表单验证的方法。
这是方法def value_from_datadict(self, data, files, name)
您可以在此处看到它:Pseudo-form in Django admin that generates a json object on save