2017-10-31 10 views
2

私はセロリのタスクを実行しようとしていました。order_create()は2つの引数をとります(1が与えられます)

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'), 
    ] 

私は(エラー」order_createを取得していたコードを実行する)、正確に2を取ります引数(1与えられた) '。誰かが私にそれを解決するのを助けることを願っています。ありがとうございました。

以下は、注文が作成された後にメールを送信する作業コードですが、ビュー機能全体をセロリのタスクとして変更したいと考えていました。

@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

urls.pyファイルは表示できますか? – wpercy

+0

これはタスクとは関係ありません。 'order_create'はビュー自体です。 –

答えて

0

URL以下に変更URLの定義は、ビューにパラメータとして

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

をORDER_ID渡して見逃していると、あなたは、URLとORDER_IDを渡す必要があります。

+0

このパターンでは、引数が見つからずに 'order_create'の逆順を返します。1パターンが試行されました: " – user6837382

+0

API呼び出しはhttps:// domain/create/1234のようになります.1234がorder_idの場合、どのようにAPI呼び出しを行っていますか教えてください。 – daemon24

+0

私はセロリタスクが注文が作成された後にメールを送信する作業コードを持っていますが、私が望むのは、すべてのビュー機能をセロリのタスクに変更することです – user6837382

関連する問題