Data model

Data in Shoop is stored into database using regular Django models and it is accessed with Django’s normal query API. See shoop.core.models for list of models in Shoop Core.

Extending models

Non-polymorphic models

Basic models (like Product, Category or Order) cannot be replaced. To extend them, create a new model for your extensions and link that to the original model with a OneToOneField.

For example:

from django.core import models
from shoop.core import models as shoop_models

class MyProduct(models.Model):
    product = models.OneToOneField(shoop_models.Product)

    # fields of the extension...
    my_field = models.CharField(max_length=10)
    ...

Todo

Check Multi-table inheritance for extending models

Note

Even though basic models cannot be replaced, it is possible to replace the User model. See Specifying a custom User model.

Polymorphic models

Polymorphic models (like Contact) can be extended by inheritance. The polymorphic base class has a model manager that makes sure that the returned objects are correct type. For example, when getting all Contacts with a query like Contact.objects.all(), the returned QuerySet may have instances of PersonContact, CompanyContact and your custom class.

See django-polymorphic’s documentation for details.