1

出于某种原因,我的表格不接受美国日期格式。我想知道是否有任何来自美国的 Django 开发人员可以帮助我解决这个问题。我怀疑设置中的时区也会影响日期格式,但我不确定。

设置:

TIME_ZONE = 'Europe/London'
LANGUAGE_CODE = 'en-us'
USE_I18N = True
USE_L10N = True
USE_TZ = True

模型形式:

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 就会从我的浏览器会话中获取设置,因此日期格式更改为欧洲反映我的位置。聪明的。

现在以美国日期格式接受日期输入。在我得到的模板Aug. 31, 2012中,这也是正确的。但是在表格中,一旦我尝试修改我得到的记录2012-08-31

这似乎不对。当然我可以用format='%m/%d/%Y'它来覆盖它,但这不是硬编码和不好的做法吗?当然,表格必须依赖于当前文化的日期格式,即美国,但为什么没有发生呢?

4

3 回答 3

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. 这有点复杂,请参阅创建自定义格式文件 我在这里创建了一个演示。

该演示仅在中途工作,因为切换语言仅适用于模板而不适用于表单。为了解决这个问题,您需要 danihp 的解决方案。:) 语言需要再次激活,一旦切换。有关他的完整修复,请参见此处

为了解决这个问题,团队付出了巨大的努力。:)

我希望这可以帮助那里的人...

于 2012-08-15T21:08:26.630 回答
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
于 2012-08-12T21:17:35.800 回答
0

固定的!!嗨,Kave,经过一段时间的调查,我终于找到了解决方案。

  • 首先,您应该使用 activate(language_code) 切换到新语言。
  • 您必须同时设置为本地化:字段和小部件:

示例切换语言:

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:尽管选择了语言,表单仍然依赖 LANGUAGE_CODE 来格式化日期时间(包括演示) ”帖子。

于 2012-08-15T20:31:57.523 回答