2016-10-01から1ヶ月間の記事一覧
Braintree の設定方法 Braintree sandboxに登録 2016年10月現在では、braintreeは日本に対応していないため、とりあえずsandboxで試してみる。 Braintreeをinstall pip install braintree pip freeze > requirements.txt settings/local.py にBratintr…
Order Detail Viewを、class based viewで作成 orders/views.py に OrderDetail viewを作成 from django.views.generic.detail import DetailView ... class OrderDetail(DetailView): model = Order ... urls.py を設定する。 url(r'^orders/(?P<pk>\d+)/$', Or</pk>…
Login Required Mixinを作成する orders/mixins.py に追記する。 from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator class LoginRequiredMixin(object): @method_decorator(login_required)…
Order List Viewを作成する Generic display views | Django documentation | Django orders/views.py に、class OrderListView を追記する。 from django.views.generic.list import ListView class OrderList(ListView): queryset = Order.objects.all() d…
Order Statusを追加する orders/models.py を追記する ORDER_STATUS_CHOICES = ( ('created', 'Created'), ('completed','Completed'), ) class Order(models.Model): status = models.CharField(max_length=120, choices=ORDER_STATUS_CHOICES, default='cr…
注文を確定するviewの作成 carts/views.py にcheckoutfinalview classを追記する。 class CheckoutFinalView(View): def post(self, request, *args, **kwargs): return redirect("checkout") def get(self, request, *args, **kwargs): return redirect("ch…
Cart,OrderのMixinの作成 carts/views.py MixinViewを追加する。 CheckoutViewのget_orderと、get_objectを新しく作成したCartOrderMixinにコピペしてみる。(get_object()は、get_cartに名前を変えてある) class CartOrderMixin(object): def get_order(se…
.btn{ border-radius:○px; } で数字が小さいほど、丸っぽさは取れていく。
Orderのアプリを完成させる 現時点では、ゲストとしてメールアドレスを入力すると、同じページにredirectされるようになっているため、この辺りを編集していく。 carts/views.py のCheckoutViewのget_context_data を修正する。 class CheckoutView(FormMixi…
Order内容の修正 現状では、ゲストユーザーが買い物を続けようとすると、anonymous userは認証できないという画面が出てきてしまう。それを修正する。 errorの原因は、AddressSelectFormViewの、get_form()の箇所だと思われる。 orders/views.py に追記する…
Order アプリの作成 part2 carts/checkout_views.htmlの編集 {% extends "base.html" %} {% load i18n %} {% load crispy_forms_tags %} {% block content %} {% if not user_can_continue %} ... {% else %} <p class='lead'> あなたのご注文内容 </p> <table class='table'> <tr>Tax: {{order.cart.tax_t</tr></table>…
order 処理を完成させる orders/models.py のOrderを修正する。 from django.db.models.signals import pre_save class Order(models.Model): ... def order_pre_save(sender, instance, *args, **kwargs): shipping_total_price = instance.shipping_total_…
OrderのModelを整えていく orders/views.pyを少し修正する class AddressSelectFormView(FormView): ... def form_valid(self, form, *args, **kwargs): print (form.cleaned_data["billing_address"]) print (form.cleaned_data["shipping_address"]) retur…
Model Choice Fieldを利用してみる 公式ドキュメント: Form fields | Django documentation | Django orders/froms.py のAddressFormに追記してみる。 from .models import UserAddress ... class AddressForm(forms.Form): billing_address = forms.ModelC…
UserAddressのViewを作成する orders/views.py を編集する。 Generic editing views | Django documentation | Django 今回は、フォームビューを使ってみる。 from django.shortcuts import render from django.views.generic.edit import FormView from .fo…
ユーザーの配送先住所 carts/views.py のget_context_dataを編集する。 もし、認証済みのuserだった場合は、session[user_checkout_id] を、そのuserのuser_checkout.idに書き換える。これにより、checkout のインスタンスは、そのユーザーuniqueなものとし…
ゲストユーザの情報をsaveする carts/view.py 2、orders/models.py UserCheckoutをimportする。 post メソッドに、formでゲットしたemailと、UserCheckoutで、createしたuserを、user_checkoutとして、代入する。これで、usercheckoutに、インスタンスが保…
チェックアウトフォームと、フォームのmixinを作成する order/forms.py を作成 from django import forms class GuestCheckoutForm(forms.Form): email = forms.EmailField() email2 = forms.EmailField(label='確認用') def clean_email(self): email = sel…
Order Appを作成する orderappを作成して、models.pyを作成する from django.conf import settings from django.db import models # Create your models here. class UserCheckout(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, nu…
CheckoutView carts/views.py views.py にCheckout Viewを作成する。DetailViewを継承して、class based viewを作成する。 class CheckoutView(DetailView): model = Cart template_name = "carts/checkout_view.html" carts/views.py に追記 class Checkout…
カートにトータルと消費税をつける carts/models.py にフィールド追加 tax_total, totalを追記しておく do_tax_and_total_receiver には、subtotalなどの計算式を入れておく pre_save signalで、Cartからpre_save signalが来たらdo_tax_and_total_receiverに…
Navbarのカートアイコンに数字を入れる。 navbar.html にcartのurlを追記する。 <ul class="nav navbar-nav navbar-right"> <li> <a href='{% url 'cart' %}'><i class="fa fa-shopping-cart fa-navbar-cart" aria-hidden="true"></i><span class='badge'>0</span></a> </li> navbar.html のbadgeの箇所にidを挿入する。(jquery用) </ul>
カートが空の時の動作を設定する 現時点では、post_saveしか使っていなため、post_deleteを使ってみる。 post_delete ... from django.db.models.signals import pre_save, post_save, post_delete ... def cart_item_post_save_receiver(sender, instance, …
動作によって、メッセージを変更する carts/view.py にメッセージ変数を設定する。 class CartView(SingleObjectMixin, View): ... flash_message = "" ... cart_item, created = CartItem.objects.get_or_create(cart=cart, item=item_instance) if created…
jQueryでフラッシュメッセージを表示させる。 product_detail.html に試しに入れてみる。 <div class="alert alert-success alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> <strong>Warning!</strong> Better check yourself, you'r…</div>
Cartの中で数量を変更したら、自動的に合計も計算される view.html を編集 タグを、更新などと一緒のテーブルに入れる。 <td> <form action="." method="GET"> <input type='hidden' name='item' value='{{ item.item.id }}'/> <input type='number' class='item-qty' name='qty' value='{{ item.quantity }}'/> </form></td>
Ajax を使う part1 products/product_detail.html のform タグにidをつけていく <form id='add-form' method='GET' action="{% url 'cart' %}"> <input class='form-control' type='number' name='qty' value='1' /> block jQuery にadd cartに関するajaxを書いていく。 <script> {% block jquery %} ... $("#submit-btn").click(function(event){ ev…</form>
cartのsubtotalを表示する。 carts/models.py に追記 subtotal fieldを追加。subtotalのアップデートfunctionを追記する。 class Cart(models.Model): ... subtotal = models.DecimalField(max_digits=50, decimal_places=0, null=True, blank=True) def __s…
pre-save signalを使って、line itemのtotalを表示する CartItemにline_item_totalを追記 class CartItem(models.Model): cart = models.ForeignKey("Cart") item = models.ForeignKey(Variation) quantity = models.PositiveIntegerField(default=1) line_i…
カートの数量をカートの中で更新できるようにする。 carts/view.htmlを修正 {% extends "base.html" %} {% block content %} <table class='table'> {% for item in object.cartitem_set.all %} <tr> <form action="." method="GET"> <td>{{ item.item.get_title }}</td> # 以下のパラメータは、hiddenにして表示はしないが、r</form></tr></table>…