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.