- admin中的fieldsets改为Fieldset
form_layout = (
Fieldset(
'基础配置',
Row("title", "category"),
'status',
'tag'
),
Fieldset(
'内容信息',
'desc',
'content'
),
)
- admin中的class Meta改为 def media
@property
def media(self):
media = super(PostAdmin, self).media()
#
# # xadmin基于bootstrap,引入会页面样式冲突,仅供参考, 故注释。
#
media.add_js(['https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/js/bootstrap.bundle.js'])
media.add_css({
'all': ("https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css", )
})
return media
- 自定义过滤器
class CategoryOwnerFilter(RelatedFieldListFilter):
@classmethod
def test(cls, field, request, params, model, admin_view, field_path):
return field.name == 'category'
def __init__(self, field, request, params, model, model_admin, field_path):
super(CategoryOwnerFilter, self).__init__(field, request, params, model, model_admin, field_path)
self.lookup_choices = Category.objects.filter(owner=request.user).values_list('id', 'name')
test方法的作用是确认字段是否需要被当前的过滤器处理。在__init__方法中,我们执行完父类的__init__方法之后,又重新定义了self.lookup_choices的值,这个值在默认情况下(也就是父类中)查询所有的数据。
- 数据处理的差异
get_queryset(self, request) -> get_list_queryset(self)
save_model(self, request, obj, form, change) -> save_models(self)
前面那一列是admin中的api接口,后面是对应的在xadmin的api接口