【发布时间】:2018-04-28 10:48:08
【问题描述】:
我正在尝试创建一个页面,用户可以在其中选择 17 名足球运动员并使用 ModelForm 保存到他们的个人资料中。
表格
class ProfileForm(ModelForm):
class Meta:
model = Profile
fields = ['GK1', 'GK2', 'DF1', 'DF2', 'DF3', 'DF4', 'DF5', 'MF1', 'MF2', 'MF3', 'MF4', 'MF5', 'FW1', 'FW2', 'FW3']
观点
def selectteam(request):
print('request.post=', request.POST)
print(request.user)
if request.method == "POST":
form = ProfileForm(request.POST, instance=request.user)
if form.is_valid():
print("form confirmed valid") #let me know that the data is valid
form.user = request.user #set the user's data we are changing
form.save() #save the form to db
for x in form.cleaned_data: #check what the data is???
print(x)
return redirect('/accounts/profile/selectteam')
else:
print(form.errors)
form = ProfileForm()
else:
selectedplayers = Player.objects.all()
# if not, you need an empty form for GET request
form = ProfileForm()
context = {'selectedplayers': selectedplayers, 'form': form}
return render(request, 'selectteam.html', context)
在我的一生中,我无法让数据实际提交。这是控制台输出:
[28/Apr/2018 10:27:33] "GET /static/images/pitch.png HTTP/1.1" 200 40216
request.post= <QueryDict: {'MF1': ['301'], 'MF2': ['301'], 'GK1': ['301'], 'DF5': ['301'], 'FW1': ['301'], 'DF1': ['301'], 'MF3': ['301'], 'FW2': ['301'], 'GK2': ['301'], 'MF5': ['301'], 'csrfmiddlewaretoken': ['RtvpMLuPVXaupYNzJdt1yvuJsOhfouH51FUQw73IRzUnKqZRLkzcNHWvoMFyVX4N'], 'DF4': ['301'], 'DF3': ['301'], 'DF2': ['301'], 'FW3': ['301'], 'MF4': ['301']}>
request.method= POST
Johnny
form confirmed valid
GK1
GK2
DF1
DF2
DF3
DF4
DF5
MF1
MF2
MF3
MF4
MF5
FW1
FW2
FW3
所以我可以看到 form.is_valid() 返回 TRUE。我可以看到正在尝试保存哪些数据。我还可以看到据称已更改的字段。
但是,当我进入管理控制台并检查用户“Johnny”时 - 字段仍然是空白/默认!我真的很困惑,因为我所有的检查和验证似乎都很好。
我唯一的猜测是表单实际发送的数据不“适合”可用的选择。例如,它可能正在尝试选择值 ['301'] 但在我的选项列表中,实际值将是 301。也许我应该做某种形式的 data_cleaning?我只是不知道! modelform生成的字段例如:
GK1 = models.ForeignKey('players.PlayerID', on_delete=models.CASCADE, null=True, related_name='+')
如果我做错了什么,谁能发现?谢谢
【问题讨论】:
标签: django django-forms