由于某种原因,我的表格中不接受美国日期格式。我想知道来自美国的任何Django开发人员是否可以帮助我。我怀疑设置中的时区也会影响日期格式,但我不确定。
设置:
TIME_ZONE = 'Europe/London'
LANGUAGE_CODE = 'en-us'
USE_I18N = True
USE_L10N = True
USE_TZ = True
的ModelForm:
class CallsForm(ModelForm):
class Meta:
model = Conversation
widgets = {
'contact_date': forms.DateInput(attrs={'placeholder': 'Add the date...', 'id': 'datepicker', 'class': 'placeholder_fix_css'}, format='%m/%d/%Y'),
}
有什么想法吗?感谢
更新
我更接近发生的事情:
MIDDLEWARE_CLASSES = (
...
'django.middleware.locale.LocaleMiddleware',
)
似乎只要加载LocaleMiddleware,Django就会从我的浏览器会话中获取设置,因此dateformat更改为欧洲反映了我的位置。聪明。
现在,在美国日期格式中接受了日期输入。
在模板中,我得到Aug. 31, 2012
,这也是正确的。
但是在表单中,一旦我尝试修改记录,我得到2012-08-31
??
这似乎不对。当然我可以使用format='%m/%d/%Y'
来覆盖它,但这不是硬编码和不良做法吗?当然,形式必须依赖于当前文化的日期格式,即美国,但为什么不发生这种情况呢?
答案 0 :(得分:0)
尝试以下方法:
class CallsForm(ModelForm):
contact_date = DateField(widget=forms.DateInput(attrs={'placeholder': 'Add the date...', 'id': 'datepicker', 'class': 'placeholder_fix_css'}, format='%m/%d/%Y'))
class Meta:
model = Conversation
答案 1 :(得分:0)
固定!!嗨Kave,经过一段时间调查你的问题,最后我找到了解决方案。
示例切换语言:
def display_current_language(request):
if request.LANGUAGE_CODE == 'en-gb':
lang = "You prefer to read British English {code}.".format(
code=request.LANGUAGE_CODE )
activate(request.LANGUAGE_CODE)
elif request.LANGUAGE_CODE == 'en-us':
lang = "You prefer to read American English {code}.".format(
code=request.LANGUAGE_CODE )
activate('en-us')
else:
lang = "You prefer to read Deutsch {code}.".format(
code=request.LANGUAGE_CODE )
activate(request.LANGUAGE_CODE)
return lang
使用您的模型(公司)和您的字段(日期)的示例:
class CompanyForm(ModelForm):
class Meta:
model = Company
def __init__(self, *args, **kwargs):
super(CompanyForm, self).__init__(*args, **kwargs)
self.fields['date'].localize = True
self.fields['date'].widget.is_localized = True
也发布在' Django: despite selected language, Forms still rely on LANGUAGE_CODE to format datetime (demo included)'交。
答案 2 :(得分:0)
如下面提到的solartic,表单中字段的localize参数必须设置为true。如果它是一个ModelForm,它将会更棘手,因为你需要一个回调:
class CompanyForm(ModelForm):
def date_callback(self, field, **kwargs) :
return field.date(localize=True, **kwargs)
class Meta:
model = Company
但这还不够。如果不对任何日期输入格式进行硬编码,则需要覆盖formats.py
。这有点复杂,请参阅Creating custom format files我已为此here创建了一个演示。
该演示仅在中途工作,因为切换语言仅适用于模板,但不适用于表单。为了解决这个问题,你需要danihp的解决方案。 :) 切换后,需要再次激活语言。如需完整修复,请参阅here
解决这个问题一直是一项伟大的团队努力。 :)
我希望这可以帮助那些人...