Установка поля CharField на RTL в Django Admin сайта
При работе с RTL-контентом очень просто использовать CKEditor, заменить TextField на RichTextField в определении модели, а затем установить редактор на RTL, но как насчет CharField (например, заголовок статьи в блоге)? Технически это тоже можно установить в RichTextEditor, но это неудобно.
Есть ли способ изменить направление текстового поля на RTL в админке Django, кроме как установить язык сайта на персидский?
В вашем admin.py файле для вашего приложения вы можете создать пользовательскую форму для вашей модели. Я не знаю вашу модель, поэтому я буду использовать общие названия для примера:
from django.contrib import admin
from app_name.models import *
from django import forms
class CustomAdminForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['mycharfield']
widgets = {'mycharfield':forms.TextInput(attrs={'dir':'rtl'})}
admin.site.register(MyModel,CustomAdminForm)
Это должно заставить текстовый ввод mycharfield отображаться как RTL на странице администратора для формы MyModel. Строка widgets = {'mycharfield':forms.TextInput(attrs={'dir':'rtl'})} изменит атрибут dir виджета ввода текста на значение rtl. Если у вас в модели более одного CharField и вы хотите RTL для всех них, просто добавьте каждое поле к атрибуту fields в форме и проделайте то же самое с атрибутом widget для каждого поля.
Поскольку ответ, предоставленный Натаном, был частично правильным, я провел собственное исследование и обнаружил, что правильный способ следующий:
class CustomPostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'slug', 'lead', 'body']
widgets = {'title': forms.TextInput(attrs={'dir': 'rtl', 'class': 'vTextField'})}
и затем:
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
form = CustomPostForm
Что меня удивляет, так это то, что приведенный выше код удалил класс vTextField из поля input, поэтому мне пришлось добавить его снова.