Установка поля 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, поэтому мне пришлось добавить его снова.

Вернуться на верх