在Django管理员中定制自定义小部件 [英] Custom widget with custom value in Django admin
问题描述
AdminDateWidget
在admin界面显示它,以便更容易地选择日期 我唯一的想法是创建新的小部件以将整数转换为日期:
class ExpireWidget(AdminDateWidget):
pre>
def render(self,name,value,attrs = None):
如果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?
解决方案每个小部件都有从POST / GET获取数据的方法,并将该数据转换为Form验证。
它的方法
def value_from_datadict(self,data,files,name)
你可以看到它在这里使用:在Django管理员中的伪表单,在保存时生成一个json对象
In model I have integer field. Meaning of value of this field is "number of days since 1.1.1970", so I wanted to display it in admin interface as a date using
AdminDateWidget
to allow easier selection of date.My only idea is to create new widget to translate integer to date:
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)
And following code in
admin.py
:class LdapUserAdminForm(forms.ModelForm): class Meta: widgets = { 'shadow_expire': ExpireWidget }
When I'm displaying it in admin date everything is ok, but before I save it I should translate date to integer. I thought that I could achieve it using
clean_field_name
function, but some validation is executed beforeclean_field_name
(is itclean()
?) and I get error that I should type integer value.How should I translate date to int before validation?
解决方案Each widget has method for taking data back from POST/GET and translating that data for Form validation.
It's method
def value_from_datadict(self, data, files, name)
You can see it used here: Pseudo-form in Django admin that generates a json object on save
这篇关于在Django管理员中定制自定义小部件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!