如何在表单中获取当前用户?
python 192
原文标题 :How to get current user in forms?
我的 Django 项目中有一个表单。在这个表单中我可以分配人员。这是我的表单:
class AssignForm(forms.ModelForm):
user = forms.ModelChoiceField(
queryset=UserProfile.objects.filter(is_active=True)
label=_(u'User')
)
class Meta:
model = Customer
fields = ('user',)
我想在这个表单中添加另一个过滤器。它是company
。我在这个表单中获得了所有用户的列表,但我只想列出属于当前用户公司的用户。所以它应该是:
queryset=UserProfile.objects.filter(is_active=True, company = current_user.company)
但我无法从表单中获取请求。我该如何处理?
回复
我来回复-
Willem Van Onsem 评论
该回答已被采纳!
您可以使用以下方法覆盖表单的构造函数:
class AssignForm(forms.ModelForm): user = forms.ModelChoiceField( queryset=UserProfile.objects.filter(is_active=True) label=_(u'User') ) def __init__(self, *args, user=None, **kwargs): super().__init__(*args, **kwargs) if user is not None: self.fields['user'].queryset = UserProfile.objects.filter( is_active=True, company__userprofile=user ) class Meta: model = Customer fields = ('user',)
然后在视图中传递登录用户:
from django.contrib.auth.decorators import login_required @login_required def my_view(request): if request.method == 'POST': form = AssignForm(request.POST, request.FILES, user=request.user) # … else: form = AssignForm(user=request.user) # …
2年前 -
Bairavan 评论
您必须通过views.py中的
request.user
才能在表单中获取它。在您的表单中编写这个__init__
函数并从您的views.py中传递用户您可以获取用户。您可以访问用户为self.user
in你的表格class AssignForm(forms.ModelForm): def __init__(self, *args, **kwargs): self.user = kwargs.get('user') kwargs.pop('user')
在您的 views.py 中调用如下表格
form = AssignForm(user=request.user)
2年前