2017-02-23 27 views
1

我有一个表单来要求一个标题和一个用户列表。我的问题是,我想显示数据库中的所有用户,但排除当前已通过身份验证的用户。我尝试了几个选项,但他们不对。你可以帮帮我吗?谢谢:动态查询集到表单

from django import forms 

class FormCal(forms.Form): 

titulo = forms.CharField(max_length=100) 

usuarios = forms.ModelMultipleChoiceField(queryset=User.objects.all(), widget=forms.CheckboxSelectMultiple(), required=False) 

回答

1

您可以访问表单类的__init__中的请求对象。您可以在那里动态调整查询集。

class FormCal(forms.Form): 

    titulo = forms.CharField(max_length=100) 

    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(FormCal, self).__init__(*args, **kwargs) 
     # exclude logged in user from queryset 
     usuarios_queryset = User.objects.all().exclude(username=self.request.user.username) 
     # add field to form 
     self.fields['usuarios'] = forms.ModelMultipleChoiceField(
      queryset=usuarios_queryset, 
      widget=forms.CheckboxSelectMultiple(), 
      required=False)