动态查询集进入表单

时间:2017-02-23 16:54:05

标签: django django-forms

我有一张表格要求提供标题和用户列表。我的问题是我想显示数据库中的所有用户,但排除当前经过身份验证的用户。我尝试了几种选择,但他们不对。你可以帮帮我吗?谢谢你:

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 个答案:

答案 0 :(得分: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)