Django пользовательская форма attrs удаляет css класс
Я имею дело с RTL CharField, поэтому я имплементировал следующее в моем admin.py:
class CustomPostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'slug', 'lead', 'body', 'status', 'is_featured']
widgets = {'title': forms.TextInput(attrs={'dir': 'rtl'})}
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
form = CustomPostForm
Это работает нормально, за исключением того, что когда я смотрю на форму на сайте администратора, ширина RTL-поля меньше, чем ширина следующего LTR-поля:
А если я удалю всю пользовательскую форму, то оба поля выглядят одинаково:
Я изучаю код и понимаю, что поле slug имеет класс css под названием vTextField, и если я изменю attrs пользовательской формы, оба поля будут выглядеть одинаково:
widgets = {'title': forms.TextInput(attrs={'dir': 'rtl', 'class': 'vTextField'})}
Итак, мой вопрос в том, нормально ли это или намеренно для Django удалять CSS класс, если используется attrs, и мой подход к установке класса обратно правильный, или я что-то упускаю?
Вы заменяете атрибуты {'class': 'vTextField'} на {'dir': 'rtl'}. Так что да, оригинальные attrs заменяются на ваши. Это нормально и ожидаемо.
Добавьте атрибут внутри метода init:
class CustomPostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'slug', 'lead', 'body', 'status', 'is_featured']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['title'].widget.attrs['dir'] = 'rtl'

