2. How to use your own addressmodel

(Instead of the default one)

Some people might feel like the current addressmodel is not suitable for their project. You might be using a “client” + address model from an external application or simply want to write your own.

This is a rather advanced use case, and most developers should hopefully be happy with the default model. It is however relatively easy to do.

2.1. Deactivate the default addressmodel

Simple enough: just remove or comment the corresponding entry in your project’s INSTALLED_APPS:

INSTALLED_APPS = (
...
'shop', # The django SHOP
#'shop.addressmodel', # <-- Comment this out
...
)

2.2. Hook your own model to the shop

To achieve this, simply add a SHOP_ADDRESS_MODEL to your settings file, and give the full python path to your Address model as a value:

SHOP_ADDRESS_MODEL = 'myproject.somepackage.MyAddress'

Your custom model must unfortunately have the following two fields defined for the checkout views to work:

user_shipping = models.OneToOneField(User, related_name='shipping_address', blank=True, null=True)
user_billing = models.OneToOneField(User, related_name='billing_address', blank=True, null=True)

This is to ensure that the views take handle “attaching” the address objects to the User (or the session if the shopper is a guest).

We recommend adding the as_text() method to your address model. This ‘collects’ all fields and returns them in one string. This string will be saved to the order (to billing_address_text or shipping_address_text accordingly) during checkout view.

You are obviously free to subclass these views and hook in your own behavior.

Table Of Contents

Previous topic

1. How to extend django SHOP models

Next topic

1. Plugins

This Page