Вам не нужно редактировать HTML. Нет необходимости переопределять fieldset.html или другие шаблоны администратора.
То, что вы хотите сделать, это:
- Убедитесь, что вы можете выбрать свой ярлык с помощью селектора CSS;
- Добавить таблицу стилей CSS.
Вы можете выбрать свой ярлык, используя следующую CSS:
/* attribute selector selecting only the label with for="id_numInvestments" */
label[for="id_numInvestments"] { width: 300px; }
или
/* Applies to all labels in fieldset with class='field-numInvestments' */
.field-numInvestments label { width: 300px; }
Создайте новый CSS-файл где-нибудь в вашем статическом каталоге (/path/to/my.css).
Содержимое этой таблицы стилей должно быть одним из указанных выше селекторов CSS.
Чтобы включить эту таблицу стилей в заголовки страниц администратора "добавить" и "изменить", добавьте "класс Media" в свой ModelAdmin:
admin.py
class MyModelAdmin(admin.ModelAdmin):
...
class Media:
css = {
'all': ('/path/to/my.css',)
}
admin.site.register(MyModel, MyModelAdmin)
Примечание. «Все» предназначено для всех типов носителей. Вы также можете использовать «экран», «печать», «проекция» и т. Д.
Готово!
В качестве альтернативы Django предоставляет способ добавлять классы CSS в наборы полей через admin.py.
Таблица стилей администратора по умолчанию содержит классы CSS 'wide' и 'extrapretty'. Они дают вашему администратору «добавить» и «изменить» страницы широкий и необычный вид. Этот взгляд имеет более широкие ярлыки! Так что, если вам повезет, их достаточно, и вам не нужно добавлять собственную таблицу стилей! :) 1030 * *
Чтобы установить класс css для набора полей, вам нужно определить наборы полей в ModelAdmin.
admin.py:
class MyModelAdmin(admin.ModelAdmin):
...
fieldsets = (
(None, {
'classes': ('wide', 'extrapretty'),
'fields': ('numInvestments', '...' ) # And all other fields.
}),
admin.site.register(MyModel, MyModelAdmin)
Если 'wide', 'extrapretty' недостаточно, используйте 'fieldsets', чтобы добавить собственный класс css ('extra_wide') в ваш набор полей.
admin.py:
class MyModelAdmin(admin.ModelAdmin):
...
fieldsets = (
(None, {
'classes': ('extra_wide', ),
'fields': ('numInvestments', 'other_field_with_wide_label' )
}),
(None, {
'fields': ('other_field', '...' ) # All other fields.
}),
)
class Media:
css = {
'all': ('/path/to/my.css',)
}
admin.site.register(MyModel, MyModelAdmin)
my.css:
.extra_wide label { width: 300px; }
Преимущество наборов полей заключается в том, что вы можете использовать стандартную CSS django или создать таблицу стилей только один раз. Остальное контролируется формой admin.py. Так что это лучше для нескольких вхождений широких меток.
Еще одна альтернатива: просто избегайте проблемы.
1) Сделайте вашу метку короче и используйте 'help_text', чтобы объяснить, о чем ваше поле:
models.py:
numInvestments = models.IntegerField('Your total number of investments')
будет:
numInvestments = models.IntegerField('Investments',
help_text="Your total number of investments.")
2) Просто сделайте вашу метку короче и используйте наборы полей, чтобы поместить заголовок над полем, который объясняет, о чем это поле:
models.py:
numInvestments = models.IntegerField('Number')
admin.py:
class MyModelAdmin(admin.ModelAdmin):
...
fieldsets = (
('Investments', {
'fields': ('numInvestments', )
}),
)
admin.site.register(MyModel, MyModelAdmin)
Я бы использовал селектор атрибутов css, если мне действительно нужен длинный ярлык, и это уникальное исключение. Но если есть более длинные метки, я бы использовал fieldset с 'wide' и 'extrapretty' или пользовательским классом ('extra_wide'). Но большую часть времени я пытался избежать этой проблемы, используя более короткие метки, help_text и группируя поля в наборах полей с заголовками.
Это ответило на ваш вопрос? Надеюсь, это поможет.