Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django e-commerce part58 UserAddress Model

ユーザーの配送先住所

carts/views.py のget_context_dataを編集する。

もし、認証済みのuserだった場合は、session[user_checkout_id] を、そのuserのuser_checkout.idに書き換える。これにより、checkout のインスタンスは、そのユーザーuniqueなものとして機能する。

    def get_context_data(self, *args, **kwargs):
...
        if self.request.user.is_authenticated():
            user_checkout, created = UserCheckout.objects.get_or_create(email=self.request.user.email)
            user_checkout.user = self.request.user
            user_checkout.save()
            request.session["user_checkout_id"] = user_checkout.id
        context["user_can_continue"] = user_can_continue
        context["form"] = self.get_form()
        return context
...

orders/models.py にUserAddress classを作成する。

ADDRESS_TYPE = (
    ('billing', 'Billing'),
    ('shipping', 'Shipping'),
)


class UserAddress(models.Model):
    user = models.ForeignKey(UserCheckout)
    type = models.CharField(max_length=120,choices=ADDRESS_TYPE)
    street = models.CharField(max_length=120)
    city = models.CharField(max_length=120)
    state = models.CharField(max_length=120)
    zipcode = models.CharField(max_length=120)

    def __str__(self):
        return self.street

user, useradress, UserCheckoutの関係について

UserCheckout 1-1 AUTH_USER_MODEL, UserCheckout 1-多 UserAdress で、擬似的に、auth_userが、複数のアドレスを持てるようになっている。これは別のサービスでもいかせそう。