1

下面的代码从下拉菜单中删除某些值。它工作正常,但如果用户缺乏某些权限,我想删除该值。如何在 ModelForm 的构造函数中访问 request.user?还是有更好的方法来完成我想做的事情?

class AnnouncementModelForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(AnnouncementModelForm, self).__init__(*args, **kwargs)
        self.fields["category"].queryset = AnnouncementCategory.objects.filter(can_post=True)   
4

2 回答 2

1

如何在 ModelForm 的构造函数中访问 request.user?

要在 Form 构造函数中使用它,只需将请求传递给它。

class AnnouncementModelForm(forms.ModelForm):

    def __init__(self, request, *args, **kwargs):
        super(AnnouncementModelForm, self).__init__(*args, **kwargs)
        qs = request.user.foreignkeytable__set.all()
        self.fields["category"].queryset = qs
于 2009-10-16T10:56:01.600 回答
1

好的,这就是我解决它的方法:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "category" and not request.user.has_perm('can_post_to_all'):
        kwargs["queryset"] = AnnouncementCategory.objects.filter(can_post=True)
        return db_field.formfield(**kwargs)
    return super(AnnouncementAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
于 2009-10-16T11:24:52.307 回答