Python ';QueryDict&x27;对象没有属性';id';

Python ';QueryDict&x27;对象没有属性';id';,python,django,django-forms,Python,Django,Django Forms,在“面板”页面上,我有一个选项字段,其中包含上载的文档列表或我通常引用的“机器人”。此列表仅显示当前用户已上载的“机器人” 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.ob

在“面板”页面上,我有一个选项字段,其中包含上载的文档列表或我通常引用的“机器人”。此列表仅显示当前用户已上载的“机器人”

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))
这可以正常工作,并显示所有用户bot的列表。当我试图将这些值传递到“游戏”页面并在此处访问它们时,问题就出现了

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)
我发现并阅读了许多类似的问题,但我似乎无法将它们的解决方案贯彻到我自己的项目中


提前感谢您提供的所有帮助。

当您构建
botForm
时,您正在传递
请求。POST
(查询信息)作为
用户
参数。你是说

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


(假设您使用的是django身份验证)。

当您构建
botForm
时,您将
request.POST
(一个QueryDict)作为
用户
参数传递。你是说

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


(假设您使用的是django身份验证)。

请提供完整的堆栈跟踪。请提供完整的堆栈跟踪。您解决了我的问题,您这个漂亮的人。如果你看不出我不是很有经验,基本上是在我前进的过程中从各种来源拼凑起来的。你解决了我的问题,你这个漂亮的人。如果你说不出来,我不是很有经验,基本上是从资料中拼凑出来的。