1

「パネル」ページには、アップロードされたドキュメントまたは「ボット」のリストを含む選択フィールドがあり、通常はそれらを参照します。このリストには、現在のユーザーがアップロードした「ボット」のみが表示されます。

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)

私は多くの同様の問題を見つけて読みましたが、それらの解決策を自分のプロジェクトに引き継ぐことができないようです。

あらゆる助けを前もって感謝します。

4

1 に答える 1

9

を作成するときは、 (QueryDict) をパラメーターとしてbotForm渡します。もしかしてrequest.POSTuser

panel = botForm(request.user, data=request.POST) 

?

(django認証を使用していると仮定します)。

于 2012-12-29T19:15:09.477 に答える