如何在管理中的django modelform中访问request.user

use*_*424 2 python django

希望通过覆盖更改列表视图来根据模型管理中当前登录的用户过滤下拉列表。我正在尝试过滤仅属于该部门用户的类别下拉列表

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)
Run Code Online (Sandbox Code Playgroud)

如何才能实现这一目标?使用 django 1.6.5

错误

type object 'CategoryForm' has no attribute 'fields'
Run Code Online (Sandbox Code Playgroud)

Ale*_*kha 5

一般来说,改变 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
Run Code Online (Sandbox Code Playgroud)