Django Xadmin中过滤多对多字段的解决方案

温以宁
温以宁
发布时间:2026-10-13 | 6人浏览过
原创

本文介绍了在Django Xadmin中无法直接使用formfield_for_manytomany方法过滤多对多字段的限制,并提供了通过重写formfield_for_dbfield方法实现过滤的解决方案。同时,附带了如何在Django Admin后台为User模型扩展下拉框和多选框字段的完整代码示例,帮助开发者优化后台管理界面。

Xadmin多对多字段过滤限制与解决

在Xadmin框架中,开发者无法像使用原生Django Admin那样,通过formfield_for_manytomany方法来直接过滤多对多字段。

经过查阅Xadmin源码,发现formfield_for_dbfield方法可用于此场景。经测试,该方法能够有效过滤第一个选项框的值。

Django Admin User模型字段扩展示例

补充知识:介绍如何为Django Admin后台的User模型扩展下拉框及多选框字段。

第一步,在models.py中定义用于扩展User的userProfile模型,以及存储下拉框和多选框选项值的模型。由于选项值需从数据库获取,具体实现代码如下:

第二步,在admin.py中编写代码以扩展User字段。具体实现代码如下:


# -*- coding: UTF-8 -*-
from django.contrib import admin
from django import forms
from TESTAPP.models import test,userProfile
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
 
# Register your models here.
class userProfileForm(forms.ModelForm):
  option = forms.ModelChoiceField(label=u'下拉框',queryset=test.objects.all())
  checkbox = forms.ModelMultipleChoiceField(label=u'多选框',queryset=test.objects.all(),widget=forms.CheckboxSelectMultiple())
  class Meta:
    model = userProfile
    fields = ['option','checkbox']
class profileInline(admin.StackedInline):
  model = userProfile
  form = userProfileForm
class testUserAdmin(UserAdmin):
  inlines = [profileInline,]
admin.site.unregister(User)
admin.site.register(User, testUserAdmin)

完成上述两步后,即可在Django Admin后台管理User时,成功扩展出一个下拉框和一个多选框。效果如图所示:

以上关于Django Xadmin多对多字段过滤及User扩展的内容分享完毕,供各位参考。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表