class GroupAdmin(admin.ModelAdmin): search_fields = ('name',) ordering = ('name',) filter_horizontal = ('permissions',) def formfield_for_manytomany(self, db_field, request=None, **kwargs): if db_field.name == 'permissions': qs = kwargs.get('queryset', db_field.remote_field.model.objects) # Avoid a major performance hit resolving permission names which # triggers a content_type load: kwargs['queryset'] = qs.select_related('content_type') return super().formfield_for_manytomany(db_field, request=request, **kwargs)
时间: 2024-04-27 22:25:19 浏览: 193
基于K.image_data_format() == channels_first 的理解
这段代码是用来定义 Django 管理后台中的一个名为 Group 的模型的管理类。其中:
- `search_fields = ('name',)` 表示在管理后台的列表页中添加一个搜索框,可以搜索该模型的 name 字段。
- `ordering = ('name',)` 表示在管理后台的列表页中按照 name 字段进行排序。
- `filter_horizontal = ('permissions',)` 表示在管理后台的编辑页中使用水平的多选框来选择 permissions 字段的值。
另外,`formfield_for_manytomany` 方法是一个钩子方法,用来为多对多关系字段定制表单字段。在这里,它判断如果是 permissions 字段,则通过 `select_related` 方法预先加载 content_type 字段,以避免性能问题。最后,调用父类的方法来创建表单字段。
阅读全文