【发布时间】:2010-11-30 00:26:54
【问题描述】:
我正在尝试找到一种简单的方法来构建以澳大利亚格式 (dd/mm/yyyy) 显示日期的表单。这是我能找到的唯一方法。似乎应该有更好的解决方案。
注意事项:
- 创建了一个以 dd/mm/yyyy 格式呈现日期值的新小部件
- 创建了新的日期字段以将定位日期格式字符串添加到它尝试使用的值列表中
我认为理想的解决方案是自动本地化的日期字段,但这对我不起作用(strftime 似乎对 unicode 不友好,但我没有很努力)
我错过了什么吗?有没有更优雅的解决方案?这是一种稳健的方法吗?
from models import *
from django import forms
import datetime
class MyDateWidget(forms.TextInput):
def render(self, name, value, attrs=None):
if isinstance(value, datetime.date):
value=value.strftime("%d/%m/%Y")
return super(MyDateWidget, self).render(name, value, attrs)
class MyDateField(forms.DateField):
widget = MyDateWidget
def __init__(self, *args, **kwargs):
super(MyDateField, self).__init__(*args, **kwargs)
self.input_formats = ("%d/%m/%Y",)+(self.input_formats)
class ExampleForm(ModelForm):
class Meta:
model=MyModel
fields=('name', 'date_of_birth')
date_of_birth = MyDateField()
【问题讨论】:
-
一个简单的替代方法是依靠 javascript 日历小部件来进行本地化。我们使用的一个只是隐藏我的日期字段并使用指定的本地格式创建另一个。
-
关于特定小部件和连接小部件的任何信息?
-
我想我应该参考stackoverflow问题:stackoverflow.com/questions/114068/…。
-
我在下面的回答提供了一种比覆盖小部件格式更通用的方法。
标签: django forms strftime datefield