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})
答案 0 :(得分:0)
您已告诉表单将用户视为第一个位置参数,因此您需要将其传递给那里。
form2 = class_model(request.user, data=request.POST)