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

さて、この問題の解決策に進みましょう。ここまでたどり着けたのは素晴らしいチームワークです。:)

以下で説明するように、フォーム内のフィールドの localize パラメータを true に設定する必要があります。ModelForm の場合は、コールバックが必要なため、もう少し注意が必要です。

class CompanyForm(ModelForm):
    def date_callback(self, field, **kwargs) :
        return field.date(localize=True, **kwargs)

    class Meta:
        model = Company  

しかし、これでは十分ではありません。日付入力形式をハードコーディングせずに、formats.py. これは少し複雑です。カスタム フォーマット ファイルの作成 I've created a demo to this hereを参照してください。

言語の切り替えはテンプレートに対してのみ機能し、フォームに対しては機能しないため、デモは途中までしか機能しません。これを解決するには、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

修理済み!!こんにちはケイブ、あなたの問題をしばらく調べた後、ついに解決策を見つけました。

  • まず、 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

モデル (company) とフィールド ( date ) を使用したサンプル:

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 に答える