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が、複数のアドレスを持てるようになっている。これは別のサービスでもいかせそう。