Django 自定义表单属性删除 css class
Django custom form attrs removes css class
我正在处理 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
字段有一个名为 vTextField
的 css
class,如果我更改自定义表单的 attrs
两个字段看起来一样:
widgets = {'title': forms.TextInput(attrs={'dir': 'rtl', 'class': 'vTextField'})}
所以我的问题是,如果使用 CSS class,Django 删除 CSS class 是正常的还是有意的,我将 class 放回去的方法是正确,还是我遗漏了什么?
您正在用 {'dir': 'rtl'}
替换属性 {'class': 'vTextField'}
。所以是的,原来的 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'
我正在处理 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
字段有一个名为 vTextField
的 css
class,如果我更改自定义表单的 attrs
两个字段看起来一样:
widgets = {'title': forms.TextInput(attrs={'dir': 'rtl', 'class': 'vTextField'})}
所以我的问题是,如果使用 CSS class,Django 删除 CSS class 是正常的还是有意的,我将 class 放回去的方法是正确,还是我遗漏了什么?
您正在用 {'dir': 'rtl'}
替换属性 {'class': 'vTextField'}
。所以是的,原来的 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'