【发布时间】:2020-06-10 12:29:18
【问题描述】:
我在我的表单中添加了一个过滤器,因此它只在 request.GET 时显示属于用户的选项,一开始一切正常,但下次运行时,出现问题。它显示了'QueryDict' object has no attribute 'id'的错误,所以通过检查,我发现表单中的user变量接收到了request.POST发送的数据。这不应该发生,我猜?这是我的代码
Views.py
@login_required
@transaction.atomic
def update_profile(request):
if request.method == 'POST':
profile_form = ProfileForm(request.POST,instance=request.user.profile)
if profile_form.is_valid():
profile_form.save()
messages.success(request,_('success!'))
return redirect('character-manage')
else:
messages.error(request,_('something is wrong.'))
else:
profile_form = ProfileForm(instance=request.user.profile,user=request.user)
return render(request,'corp/profile.html',{
'profile_form':profile_form
})
Forms.py
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('pcharacter',)
def __init__(self,user=None,**kwargs):
super(ProfileForm,self).__init__(**kwargs)
if user:
self.fields['pcharacter'].queryset = EveCharacter.objects.filter(bounduser=user)
当我在__init__ 函数下添加print(user) 时,刷新表单页面,我会得到一个用户对象,但是当我提交表单时它会显示类似<QueryDict: {'csrfmiddlewaretoken': ['*****'], 'pcharacter': ['2']}>什么错误?任何建议或指导表示赞赏。
【问题讨论】: