10

プレースホルダー、 forms.DateInputのdjangoのattrs指定子を介して適用しようとしたときにクラスが設定されない

フォームはModelFormです。

そして、ドキュメントによると

TextInputと同じ引数を取りますが、オプションの引数がもう1つあります。

コードは次のとおりです。

widgets = {
   'my_date_field': forms.DateInput(format=('%d-%m-%Y'), 
                    attrs={'class':'myDateClass', 
                           'placeholder':'Select a date'}
                    )
}

同じことがに適用され、forms.TextInputそれはうまく機能します。

ここで何が欠けていますか?

誰もが完全なクラスコードを望んでいます:

class trademark_form(ModelForm):
    my_date_field = DateField(input_formats=['%d-%m-%Y'])
    class Meta:
        model = myModel

        widgets = {
                   'my_date_field': forms.DateInput(format=('%d-%m-%Y'), attrs={'class':'myDateClass', 'placeholder':'Select a date'}),
                   'field1': forms.TextInput(attrs={'class':'textInputClass', 'placeholder':'Enter a Value..'}),
                   'field2': forms.TextInput(attrs={'class':'textInputClass', 'placeholder':'Enter a Value..', 'readonly':'readonly', 'value':10}),
                   'desc': forms.Textarea(attrs={'class':'textAreaInputClass', 'placeholder':'Enter desc', 'rows':5}),

               }
        exclude = ('my_valid_field')

フィールド用に生成されたHTML my_date_field、:

<input type="text" id="id_my_date_field" name="my_date_field">

フィールド用に生成されたHTML field1、:

<input type="text" name="field1" class="textInputClass" placeholder="Enter a Value.." id="id_field1">
4

5 に答える 5

15

あなたからフォームコードを投稿しませんでした。私の推測では、このようなフォームフィールドを明示的にインスタンス化したと思います。おおよそ次のようなコードを投稿して、私の推測を確認しました。

class MyForm(forms.ModelForm):
    my_date_field = forms.DateField()

    class Meta:
        model = MyModel
        widgets = {
            'my_date_field': forms.DateInput(format=('%d-%m-%Y'), 
                                             attrs={'class':'myDateClass', 
                                            'placeholder':'Select a date'})
        }

このようにフォームフィールドを明示的にインスタンス化すると、Djangoはフォームフィールドの動作を完全に定義したいと想定するため、機能していないと言えます。widgetsしたがって、内部Metaクラスの属性を使用することはできません。

デフォルトのフィールドタイプまたはウィジェットのオーバーライドに関するセクションの最後の注記には、次のように記載されています。

宣言的に定義されたフィールドはそのまま残されるため、ウィジェット、ラベル、help_texts、error_messagesなどのメタ属性に加えられたカスタマイズはすべて無視されます。これらは、自動的に生成されるフィールドにのみ適用されます。

于 2013-03-26T14:46:23.810 に答える
3

@Martinの応答に基づいて、Djangoのドキュメントを読むと、最終的な解決策は次のようになります。

class MyForm(forms.ModelForm):
    my_date_field = forms.DateField(
        widget=forms.DateInput(format=('%d-%m-%Y'), 
                               attrs={'class':'myDateClass', 
                               'placeholder':'Select a date'}))

    class Meta:
        model = MyModel
        widgets = {
        }
于 2016-05-17T20:32:10.557 に答える
1

派手なJAvascriptライブラリを使用せずにHTMLDatepickerを簡単に作成できます。簡単なデモは次のとおりです。

まず、Dateinputから継承されたdateinputフィールドを作成します。

 class DateInput(forms.DateInput):
     input_type = 'date'

そして、このDateInputフィールドを次のように使用します。

 class BookingRoomForm(ModelForm):
     class Meta:
         widgets = {'checkin':DateInput()}
         model = BookingRoom
         fields = ['checkin',]

ModelFormを使用していない場合は、次のようなウィジェットを使用してください。

class BookingRoomForm(ModelForm):
    checkin = forms.DateField(widget=DateInput())
    class Meta:
        model = BookingRoom
        fields = ['checkin',]

そして、出力は次のようになります: ここに画像の説明を入力してください

于 2020-02-02T11:57:32.910 に答える
1
forms.DateField(widget=forms.DateInput(format=('%d-%m-%Y'),attrs={'class': 'datepicker', 'placeholder': 'Select a date', 'type': 'date'}))

入力タイプが変更されない場合、これは私にとってはうまくいきました。

于 2021-02-24T11:28:09.590 に答える
0

私は違うことをしました、

これをModelFormに適用するフォームに

class Form(forms.ModelForm):
    class Meta:
        model = MODEL
        fields = ['day']
        widget = {
            'day': DateInput(attrs={'placeholder': 'Nome do tratamento',
                                         'id': 'id_day'})
        }

私のメインのタンプレットで私は適用しました:

<head>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.0/themes/base/jquery-ui.css" />
    <script src="http://code.jquery.com/jquery-1.8.2.js"></script>
    <script src="http://code.jquery.com/ui/1.9.0/jquery-ui.js"></script>
</head>
<body>
Form here

<script>
$(function() {
    $( "#id_day" ).datepicker();
});
</script>

</body>
于 2020-08-15T00:55:35.293 に答える