У меня проблема с доступом к данным POST формы Django.
Мне нужно передать request.user в форму, поэтому:
class TradeForForm(forms.Form):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
else:
request = kwargs.pop('request')
super(TradeForForm, self).__init__(*args, **kwargs)
#Obtain items for user
if user:
print user
items = Item.objects.filter(user=user)
choices = []
for i in range(len(items)):
choices.append([i,items[i].name])
self.fields['item_to_be_traded_for'].choices = choices
trade_type = forms.ChoiceField(
widget=RadioSelect(),
choices = [
['0','Item'],
['1','Money offer'],
]
)
item_to_be_traded_for = forms.ChoiceField()
, а затем вызвать его с помощью:
def trade_for(request, item_id):
item = Item.objects.get(id=item_id)
if request.method == 'POST':
form = TradeForForm(request.POST)
if form.is_valid():
pass
else:
form = TradeForForm(user=request.user)
variables = RequestContext(request, {
'form': form,
'item': item,
})
return render_to_response('trade_for.html', variables)
Теперь проблема в том, что когда вы выполняете GET для доступа к пустой форме, она работает просто отлично.Но когда я публикую его, я получил ошибку:
KeyError at /trade_for/1/
'user'
Request Method: POST
Request URL: http://localhost:8000/trade_for/1/
Django Version: 1.3.1
Exception Type: KeyError
Exception Value:
'user'
Теперь, как это можно исправить?Я предполагаю, что это потому, что пользовательская переменная не передается в форму при ее создании с использованием данных request.POST, но я хочу иметь возможность создавать форму с пользовательским параметром и без него, оба работают.