Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/charettes/django-tenancy
Handle multi-tenancy in Django with no additional global state using schemas.
https://github.com/charettes/django-tenancy
Last synced: 26 days ago
JSON representation
Handle multi-tenancy in Django with no additional global state using schemas.
- Host: GitHub
- URL: https://github.com/charettes/django-tenancy
- Owner: charettes
- Created: 2013-02-01T08:05:26.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2017-12-17T06:56:37.000Z (almost 7 years ago)
- Last Synced: 2024-11-14T15:40:54.099Z (29 days ago)
- Language: Python
- Homepage: http://pypi.python.org/pypi/django-tenancy
- Size: 516 KB
- Stars: 85
- Watchers: 11
- Forks: 15
- Open Issues: 1
-
Metadata Files:
- Readme: README.rst
Awesome Lists containing this project
README
**************
django-tenancy
**************Handle multi-tenancy in Django with no additional global state using schemas.
.. image:: https://travis-ci.org/charettes/django-tenancy.png?branch=master
:target: http://travis-ci.org/charettes/django-tenancy.. image:: https://coveralls.io/repos/charettes/django-tenancy/badge.png?branch=master
:target: https://coveralls.io/r/charettes/django-tenancyInstallation
============
Assuming you have django installed, the first step is to install
*django-tenancy*:::
pip install django-tenancy
Now you can import the ``tenancy`` module in your Django project.
Using django-tenancy
====================Define a Tenant Model
---------------------The tenant model must be a subclass of ``tenancy.models.AbstractTenant``.
For instance, your ``myapp/models.py`` might look like:
::
from tenancy.models import AbstractTenant
class MyTenantModel(AbstractTenant):
name = models.CharField(max_length=50)
# other fields
def natural_key(self):
return (self.name, )**Important note**: the ``natural_key`` method must return a tuple that will
be used to prefix the model and its database table. This prefix must be unique
to the tenant.Declare the Tenant Model
------------------------
Now that you have your tenant model, let's declare in your project in
*settings.py*:::
TENANCY_TENANT_MODEL = 'myapp.MyTenantModel'
Run a database synchronization to create the corresponding table:
::
python manage.py syncdb
Define the tenant-specific models
---------------------------------
The tenant-specific models must subclass ``tenancy.models.TenantModel``.For instance, each tenant will have projects and reports. Here is how
``myapp/models.py`` might look like:::
from tenancy.models import AbstractTenant, TenantModel
class MyTenantModel(AbstractTenant):
name = models.CharField(max_length=50)
# other fields
def natural_key(self):
return (self.name, )class Project(TenantModel):
name = models.CharField(max_length=50)
description = models.CharField(max_length=300, blank=True, null=True)class Report(TenantModel):
name = models.CharField(max_length=50)
content = models.CharField(max_length=300, blank=True, null=True)Playing with the defined models
-------------------------------
You can manipulate the tenant and tenant-specific models as any other Django
models.Create a tenant instance
^^^^^^^^^^^^^^^^^^^^^^^^
::tenant = MyTenantModel.objects.create("myfirsttenant")
Get a tenant-specific model: for_tenant()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.for_tenant()``TenantModel`` comes with a method that allows you to get the specific
``AbstractTenantModel`` for a given Tenant instance. For instance:::
tenant_project = Project.for_tenant(tenant)
Create a tenant-specific model instance
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::tenant_project.objects.create("myfirsttenant_project")