Skip to main content
 首页 » 编程设计

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

2024年10月24日32zhwl

希望通过覆盖更改 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