2017-10-31 6 views
2

Ich habe versucht, eine Sellerie Aufgabe zu tun, der Code wie folgt.order_create() nimmt genau 2 Argumente (1 gegeben)

task.py

from .models import OrderItem 
from cart.cart import Cart 
from .forms import OrderCreateForm 

@task(name="create_order") 
def create_order(request): 
    cart = Cart(request) 
    if request.method == 'POST': 
     form = OrderCreateForm(request.POST) 
     if form.is_valid(): 
      order = form.save() 
      for item in cart: 
       try: 
        OrderItem.objects.create(order=order, 
              product=item['product'], 
              price=item['price'], 
              quantity=item['quantity']) 
       except: 
        pass 
       cart.clear() 
      return None 
    else: 
     form = OrderCreateForm() 
    return None 

views.py

from .models import OrderItem, Order 
from cart.cart import Cart 
from .tasks import create_order 


def order_create(request, order_id): 
    order = Order.objects.get(id=order_id) 
    cart = Cart(request) 
    create_order.delay(order.id) 
    return render(request,'orders/order_created.html', {'cart': cart, 'order': order}) 

urls.py

from .views import order_create 


urlpatterns = [ 
    url(r'^create/$',order_create, name='order_create'), 
    ] 

Wenn der Ausführung des Codes ich die Störung erhalte ‚order_create() nimmt genau 2 Argumente (1 gegeben). Hoffe, jemand kann mir helfen, es zu lösen. Vielen Dank.

Das Folgende ist mein Arbeitscode, der Mail sendet, nachdem eine Bestellung erstellt wurde, aber ich wollte die gesamte Ansichtsfunktion als eine Sellerieaufgabe ändern.

@task(name="send_mail_to_custormer") 
def order_created(order_id): 
    order = Order.objects.get(id=order_id) 
    subject = 'Order nr. {}'.format(order.id) 
    message = 'Dear {} {},\n\nYou have successfully placed an order. Your order id is {}'.format(order.first_name, 
                 order.last_name, order.id) 
    from_email = settings.EMAIL_HOST_USER 
    to_email = [order.email] 
    mail_sent = send_mail(
          subject, 
          message, 
          from_email, 
          to_email, 
          fail_silently=False 
         ) 
    return mail_sent 

views.py

def order_create(request): 
cart = Cart(request) 
if request.method == 'POST': 
    form = OrderCreateForm(request.POST) 
    if form.is_valid(): 
     order = form.save() 
     for item in cart: 
      try: 
       OrderItem.objects.create(order=order, 
             product=item['product'], 
             price=item['price'], 
             quantity=item['quantity']) 
      except: 
       pass 
      cart.clear() 
      order_created.delay(order.id) 
     return render(request,'orders/order_created.html', {'cart': cart, 'order': order}) 
else: 
    form = OrderCreateForm() 
return render(request, 'orders/order_create.html', {'cart': cart, 'form': form}) 
+0

Können wir Ihre urls.py-Datei sehen? – wpercy

+0

Das scheint mit der Aufgabe nichts zu tun zu haben; 'order_create' ist die Ansicht selbst. –

Antwort

0

ändern URL-Definition unter URL, die Sie verpasst haben, vorbei order_id als Parameter zur Ansicht

url(r'^create/(?P<order_id>\w+)/$',order_create, name='order_create'), 

und Sie sollten die order_id mit der URL übergeben .

+0

Dieses Muster wirft den Fehler "Reverse für 'order_create' ohne Argumente nicht gefunden. 1 Muster versucht:" – user6837382

+0

Der API-Aufruf sollte etwa wie https aussehen: // domain/create/1234/Wenn 1234 ist Ihre Bestellnummer, Können Sie uns sagen, wie Sie den API-Aufruf durchführen? – daemon24

+0

Ich habe einen Arbeitscode, in dem Sellerie Aufgabe sendet, nachdem eine Bestellung erstellt wird, aber was ich wollte, ist, alle Ansichtsfunktion auf Sellerie Aufgabe zu ändern – user6837382

Verwandte Themen