根据用户限制字​​段的选择

mfa*_*con 5 django django-forms

我希望表单仅在 ChoiceField 中显示当前用户的帐户。我尝试执行以下操作,但不起作用。

编辑:抱歉,我忘了提及我添加的“if kwargs”,因为 TransForm() 没有显示任何字段。我想这是错误的,但我不知道另一种方式。

视图.py:

def in(request, account): 
    if request.method == 'POST':
        form = TransForm(request.user, data=request.POST)
        if form.is_valid():
            ...

    else:
        form = TransForm()

    context = {
          'TranForm': form,
    }
    return render_to_response(
        'cashflow/in.html',
        context,
        context_instance = RequestContext(request),
)
Run Code Online (Sandbox Code Playgroud)

表格.py:

class TransForm(ModelForm):
    class Meta:
        model = Trans

    def __init__(self, *args, **kwargs):
        super(TransForm, self).__init__(*args, **kwargs)
        if kwargs:
            self.fields['account'].queryset = Account.objects.filter(user=args[0])
Run Code Online (Sandbox Code Playgroud)

Ber*_*ant 5

当请求为 NO post 请求时,您还需要正确初始化表单:

if request.method == 'POST':
    form = TransForm(user=request.user, data=request.POST)
    if form.is_valid():
        ...

else:
    form = TransForm(user=request.user)
 ...
Run Code Online (Sandbox Code Playgroud)

此外,我建议在调用超类的构造函数时删除新参数:

class TransForm(ModelForm):
    class Meta:
        model = Trans

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super(TransForm, self).__init__(*args, **kwargs)
        self.fields['account'].queryset = Account.objects.filter(user=user)
Run Code Online (Sandbox Code Playgroud)