2016-12-16 1 views
0

Je suis en train de passer 2 paramètres à vue, mais il donne cette erreur de type je ne sais pas si ce problème avec les urls ou mon redirectTypeError receive_money() prend exactement 3 arguments (1 donné) -Django

//urls.py

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

// vue 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/')) 

// vue du récepteur

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}) 

Répondre

3

Puisque vous attendez 2 arguments il devrait être

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

je l'ai essayé de cette façon aussi, mais je ne sais pas pourquoi il ne reconnaissait pas l'url peut-être je n'entrait pas dans la bonne dans redirect –

+1

grâce @aks pour la fixation de la faute de frappe – e4c5

1

essayer quelque chose avec l'adresse suivante, mais je ne pense pas une bonne idée de construire une URL comme celui-ci.

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

je l'ai essayé cette façon bien mais je ne sais pas pourquoi alors il ne reconnaissait pas l'url http://127.0.0.1:8000/receive/kohli/50/ pourquoi cela ne correspond pas au modèle d'URL que vous avez donné –