「パネル」ページには、アップロードされたドキュメントまたは「ボット」のリストを含む選択フィールドがあり、通常はそれらを参照します。このリストには、現在のユーザーがアップロードした「ボット」のみが表示されます。
panel\forms.py
from django import forms
import os
from upload.models import Document
#### RETRIEVE LIST OF BOTS UPLOADED BY CURRENT USER ####
def get_files(user):
bots = Document.objects.filter(user=user.id)
file_list = []
for b in bots:
file_list.append((b.id,b.docfile))
return file_list
class botForm(forms.Form):
def __init__(self, user, *args, **kwargs):
super(botForm, self).__init__(*args, **kwargs)
self.fields['bot'] = forms.ChoiceField(choices=get_files(user))
これは正常に機能し、すべてのユーザー ボットのリストが表示されます。これらの値を「ゲーム」ページに渡してここでアクセスしようとすると、問題が発生します。
game\views.py
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from game.models import game
from game.forms import GameForm
from upload.models import Document
from panel.forms import botForm
import league
def RPS(request):
if request.method == 'POST': # If the request is a POST method...
if 'PanelPlay' in request.POST:
panel = botForm(request.POST)
if panel.is_valid():
print panel.cleaned_data['bot']
elif 'GamePlay' in request.POST:
form = GameForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
leagueOuput = []
leagueOutput = league.run(form.cleaned_data['bot1'],form.cleaned_data['bot2'])
newGame = game()
newGame.bot1 = leagueOutput[0]
newGame.bot2 = leagueOutput[1]
newGame.bot1wins = leagueOutput[2]
newGame.bot2wins = leagueOutput[3]
newGame.save()
return HttpResponseRedirect(reverse('game.views.RPS')) # Redirect after POST
form = GameForm() # An unbound form
results = game.objects.all() # Load messages for the list page
return render_to_response('game.html', {'results': results, 'form': form}, context_instance=RequestContext(request))
パネル データにアクセスして検証しようとすると、次のエラーが発生します。
「QueryDict」オブジェクトには属性「id」がありません
この特定の行を参照します。
bots = Document.objects.filter(user=user.id)
私は多くの同様の問題を見つけて読みましたが、それらの解決策を自分のプロジェクトに引き継ぐことができないようです。
あらゆる助けを前もって感謝します。