Как удалить из виджетов Django атрибуты HTML5

Виджеты Django устанавливают атрибут maxlength HTML5 на основе модели max_length.

class Publication(models.Model):
    name = models.CharField(max_length=255)

<input maxlength="255" required="" id="id_name" type="text">

Я хочу удалить этот атрибут, потому что он мешает моей собственной проверке, которая более сложна.

Я знаю, что для атрибута required может быть установлено значение false, но я не знаю других атрибутов html5.

Я хочу применить их в нескольких формах к разным полям.

Изменение формы init допустимо, но не очень масштабируемо.

Базовый класс и наследование — это вариант, но я не хочу применять его ко всем полям.

Я ищу что-то вроде required=false для применения к нескольким полям.


person user3541631    schedule 01.03.2018    source источник
comment
можешь показать свой код   -  person bvmcode    schedule 01.03.2018
comment
@bvmcode, обновленный, очень простой код; атрибут автоматически добавляется Django, я хочу удалить его из html   -  person user3541631    schedule 01.03.2018


Ответы (2)


Я решал это недавно. Я сделал это в своих формах.py:

from django import forms


class ContactForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=50, widget=forms.TextInput(attrs={'class':'form-control', 'placeholder':'Enter Name'}))
    your_surname = forms.CharField(required=False,label='Your surname', max_length=50, widget=forms.TextInput(attrs={'class':'form-control', 'placeholder':'Enter Surname'}))


    # Remove html5 attr from input field
    your_name.widget.attrs.pop('maxlength', None)

Только для информации, это действительно для форм, а не для ModelForms.

person TomRavn    schedule 27.05.2018
comment
Это работает, но не работает для атрибута «имя». - person Viqtoh; 27.06.2021

Вот пример формы из модели книги. Я ввожу одно поле под названием title. В методе init я извлекаю атрибут maxlength для этого поля. Когда вы входите в HTML, атрибута maxlength нет.

from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ('title',)

    def __init__(self, *args, **kwargs):
        super(BookForm, self).__init__(*args, **kwargs)
        self.fields['title'].widget.attrs.pop('maxlength', None)
person bvmcode    schedule 01.03.2018
comment
поэтому нет простого метода, я хочу применить к определенным полям в нескольких формах - person user3541631; 01.03.2018
comment
не то, что я знаю о. Вы можете просто создать простую функцию, которая берет словарь и извлекает максимальную длину, но вам все равно нужно init... Если я понимаю, что вы говорите - person bvmcode; 01.03.2018
comment
хорошо, спасибо, я искал что-то вроде, required=false (существует в Django) и иметь в поле maxlength=false. - person user3541631; 01.03.2018