希望通过覆盖更改 ListView ,根据模型管理中当前登录的用户过滤下拉列表。我正在尝试仅过滤属于部门用户的类别下拉列表
class CategoryForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(CategoryForm, self).__init__(*args, **kwargs)
class CategoryAdmin(admin.ModelAdmin):
list_display = ['department','name']
list_filter = ['department','name']
def changelist_view(self, request, extra_context=None):
extra_context = extra_context or {}
self.form = CategoryForm
print dir(self.form)
self.form.fields['department'].queryset = Department.objects.filter(
name = request.user.customuser.department.name)
如何实现?使用 Django 1.6.5
错误
type object 'CategoryForm' has no attribute 'fields'
请您参考如下方法:
一般来说,改变 ModelForm 类的 base_fields 并不是一个好习惯,但在这种情况下,类是在每个请求上生成的,所以没关系。
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(CategoryAdmin, self).get_form(request, obj=None, **kwargs)
form.base_fields['department'].queryset = Department.objects.filter(
name=request.user.department.name)
return form
