django - 加载当前登录表单中的用户信息

时间:2017-11-05 09:32:09

标签: python django django-forms

django noob在这里。 我要问的问题已被多次询问,但是,我无法找到可以帮助我解决问题的答案。

查询是: 我有一个表单有一个选择字段,从数据库加载其选择信息。基本上,我设计的模型的方式是,显示的选项对用户来说是个性化的。

例如: 对于user1,选择字段显示a,b,c,d。 对于用户2,选择字段显示v,w,d。

我面临的问题是引用登录用户并获取用户名。然后将用户名作为过滤器传递给数据库。

我遇到过很多 init 函数试图这样做,不知怎的,这对我的情况没有帮助。

forms.py

class class_model(forms.Form):
    class_name = forms.ChoiceField(
                    required=False,
                    widget=forms.Select,
                )

    def __init__(self, user, *args, **kwargs):
        self.user = user
        super (class_model, self).__init__(*args, **kwargs)
        current_user = self.user
        name = current_user.username
        k = User.objects.get(username=name)
        y = UserProfile.objects.get(user=k)
        schoolid = y.schoolid
        primary_filter = Class1.objects.filter (school_id=schoolid)
        ax = [("Choose Class", "Choose Class")] + list (primary_filter.objects.values_list ('class_name', 'class_name').distinct())
        self.fields['class_name'].choices = ax

我收到的错误:'QueryDict' object has no attribute 'username'

更新

views.py

            @login_required(login_url="login/")
            def create(request):
                print(request.method)
                if request.method == 'POST':
                    form2 = class_model(request.POST, request.user)
                    if form2.is_valid():
                        class_name = form2.cleaned_data['class_name']
                    return render(request, 'create_student.html', {'form2': form2}
                else:       
                    print(form.errors)
                    return render(request, 'create_student.html', {'form2': form2})

1 个答案:

答案 0 :(得分:0)

您已告诉表单将​​用户视为第一个位置参数,因此您需要将其传递给那里。

form2 = class_model(request.user, data=request.POST)