Django forms.DateInput does not apply the attributes given in attrs field

前端 未结 4 1826
情书的邮戳
情书的邮戳 2020-12-31 18:52

Placeholder, class not getting set when tried to apply through the django\'s attrs specifier for forms.DateInput

The form is a ModelForm.

And according to th

相关标签:
4条回答
  • 2020-12-31 18:58

    Since you didn't post your form code, my best guess is that you explicitly instantiated a form field like this confirmed my guess by posting the code that looks roughly like this:

    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'})
            }
    

    I can say that it's not working because if you explicitly instantiate a form field like this, Django assumes that you want to completely define form field behavior; therefore, you can't use the widgets attribute of the inner Meta class.

    The note at the end of section about overriding the default field types or widgets states that:

    Fields defined declaratively are left as-is, therefore any customizations made to Meta attributes such as widgets, labels, help_texts, or error_messages are ignored; these only apply to fields that are generated automatically.

    0 讨论(0)
  • 2020-12-31 19:13

    i did different,

    into the forms I apply this to my ModelForm

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

    at my main tamplete I applied:

    <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>
    
    0 讨论(0)
  • 2020-12-31 19:16

    you can simply create a HTML Datepicker Without using a fancy JAvascript Library.Here is the simple demo:

    First create a dateinput field inherited from Dateinput:

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

    And use this DateInput Field as like this :

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

    If you're not using ModelForm,Use widget something like this :

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

    And the output will be like this : enter image description here

    0 讨论(0)
  • 2020-12-31 19:20

    based on response of @Martin and reading the Django documentation the final solution should be:

    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 = {
            }
    
    0 讨论(0)
提交回复
热议问题