10

占位符,当尝试通过 django 的 attrs 说明符为forms.DateInput应用时未设置类

表单是ModelForm

根据文档

采用与 TextInput 相同的参数,但多了一个可选参数:

这是代码:

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

同样适用于 aforms.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类的属性。

关于覆盖默认字段类型或小部件的部分末尾的注释指出:

以声明方式定义的字段保持原样,因此对 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
forms.DateField(widget=forms.DateInput(format=('%d-%m-%Y'),attrs={'class': 'datepicker', 'placeholder': 'Select a date', 'type': 'date'}))

当输入类型没有改变时,这对我有用。

于 2021-02-24T11:28:09.590 回答
1

您可以简单地创建一个 HTML Datepicker,而无需使用花哨的 JAvascript 库。这是一个简单的演示:

首先创建一个继承自 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 回答
0

我做了不同的,

进入我将其应用于我的 ModelForm 的表格

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

在我的主要 tamplete 我申请了:

<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 回答