2016-12-16 5 views
0

Я пытаюсь передать 2 параметра на вид, но он дает этот тип ошибки я не знаю, если его проблема с URLs или мой редиректTypeError receive_money() занимает ровно 3 аргумента (1 дал) -Django

//urls.py

urlpatterns = [ 
    # 
    url(r'^receive/[a-zA-Z]+/[0-9]+/$', receive_money) 
] 

// subtract_money вид

def subtract_money(request): 

    if request.user: 
     users = User.objects.all() 
     users_ids = users.values_list('id', flat=True) 
     users_list = [] 
     for id in users_ids: 
      user = users.get(pk=id) 
      if user.username != "ravinkohli" and user.username != request.user.username: 
       users_list.append(user) 
     if request.POST and request.POST.get('amount'): 
      username = request.user.username 
      withdraw = request.POST.get('amount') 
      wallet = Wallet.objects.get(pk=request.user.userprofile.wallet_id_id) 
      # if withdraw > wallet.amount: 
      #  return render(request, 'send_money.html', {'error': 'Amount can not be greater than balance','users': users_list}) 
      wallet.subtract_money(withdraw) 
      wallet.save() 
      now = datetime.now() 
      trans = Transaction(from_name=username, wallet_id=wallet,to=request.POST.get('receiver'), date=now, amount=withdraw) 
      trans.save() 
      return redirect('/receive/%s/%s/' % (request.POST.get('receiver'), withdraw)) 
     else: 
      return render(request, 'send_money.html',{'users': users_list}) 
    else: 
     return HttpResponseRedirect('/login/?next={}'.format('/subtract_money/')) 

вид // приемник

def receive_money(request, username, amount): 
    add_amount = amount 
    wallet = Wallet.objects.get(username=username) 
    wallet.add_money(add_amount) 
    wallet.save() 
    return redirect('user_profile.html', {'user': request.user,'userprofile': Userprofile.objects.get(user=request.user), 'wallet': wallet}) 

ответ

3

Поскольку вы ожидаете 2 аргумента он должен быть

url(r'^receive/(?P<username>[a-zA-Z]+)/(?P<amount>[0-9]+)/$', receive_money) 
+0

я попробовал это так, как хорошо, но я не знаю, почему тогда это не было признание URL может быть, я не вступал правильную в перенаправлении –

+1

благодаря @aks для фиксации опечатки – e4c5

1

попробовать что-то со следующим URL, но я не думаю, что его хорошая идея построить URL, как это.

urlpatterns = [ 
    # 
    url(r'^receive/(?P<username>[a-zA-Z]+)/(?P<amount>[0-9]+)/$', receive_money) 
] 
+0

я пробовал этот способ, как ну, но я не знаю, почему тогда он не узнал URL http://127.0.0.1:8000/receive/kohli/50/, почему это не соответствует шаблону URL, который вы дали –

Смежные вопросы