将 CSS 类添加到 Django 内联字段集



我想为ModelAdmin类中指定的内联的字段集(或父divs)指定一个css类,类似于为字段集指定的类。例如:

class Set2Inline(admin.TabularInline):
    ...
class MyModelAdmin(admin.ModelAdmin):
    fieldsets = [
                ('Set1', {'fields': ['number', 'name', 'etc'], 'classes': ['toggle']})
                ]
    inlines = [Set2Inline]

有没有办法以类似于"内联"的方式添加类,例如:

inlines = [
              'Set2', {Set2Inline, 'classes': ['toggle']}
          ]

是否附加到内联的字段集或其父div 并不重要。重要的是能够以类似于为每个字段集执行的操作的方式为每个内联指定一个唯一的类。有没有办法做到这一点?如果它可以在 Set2Inline 类中完成,那也很好。

就像Peter的评论所暗示的那样,实现这一目标的唯一方法是根据django/contrib/admin/templates/admin/edit_inline/tabular.htmlSet2Inline创建自定义模板:

# admin.py
class Set2Inline(admin.TabularInline):
    template = 'myapp/templates/myapp/admin/tabular.html'
{# myapp/templates/myapp/admin/tabular.html #}
{% load i18n admin_static admin_modify %}
<div class="inline-group your-class" id="{{ inline_admin_formset.formset.prefix }}-group">
  <div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
{{ inline_admin_formset.formset.management_form }}
<fieldset class="module your-fieldset-class">
...

另一种方法是将 javascript 文件添加到 Media 中,Set2Inline使用 jQuery 添加类:

class Set2Inline(admin.TabularInline):
    class Media:
        js = 'myapp/admin/addClasses.js',
// myapp/static/myapp/admin/addClasses.js
(function($) {
    $('#mymodel-group').addClass('your-class');
    $('#mymodel-group fieldset.module').addClass('your-fieldset-class');
})(django.jQuery);

是的,你可以,

class Set2Inline(admin.TabularInline):  # extending any admin Inline Class will work AFAIK
    ...
    classes = ['collapse',]
    ...

在 Django 2.1 中工作,不确定在哪个版本中添加。

最新更新