Skip to content

Commit

Permalink
fix queryset when using custom class
Browse files Browse the repository at this point in the history
  • Loading branch information
louiseGrandjonc committed Apr 12, 2019
1 parent f51ed79 commit 1376865
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 5 deletions.
4 changes: 1 addition & 3 deletions django_multitenant/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,10 @@

class TenantManagerMixin(object):
#Below is the manager related to the above class.

def get_queryset(self):
#Injecting tenant_id filters in the get_queryset.
#Injects tenant_id filter on the current model for all the non-join/join queries.

queryset = models.QuerySet(self.model)
queryset = self._queryset_class(self.model)
current_tenant = get_current_tenant()
if current_tenant:
kwargs = get_tenant_filters(self.model)
Expand Down
23 changes: 23 additions & 0 deletions django_multitenant/tests/migrations/0008_auto_20190412_0831.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2019-04-12 08:31
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion
import django_multitenant.fields
import django_multitenant.mixins


class Migration(migrations.Migration):

dependencies = [
('tests', '0007_alter_foreignkey_field'),
]

operations = [
migrations.AddField(
model_name='somerelatedmodel',
name='opened',
field=models.BooleanField(default=True),
),
]
26 changes: 26 additions & 0 deletions django_multitenant/tests/migrations/0009_auto_20190412_0839.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2019-04-12 08:39
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion
import django_multitenant.fields


class Migration(migrations.Migration):

dependencies = [
('tests', '0008_auto_20190412_0831'),
]

operations = [
migrations.RemoveField(
model_name='somerelatedmodel',
name='opened',
),
migrations.AddField(
model_name='task',
name='opened',
field=models.BooleanField(default=True),
),
]
24 changes: 22 additions & 2 deletions django_multitenant/tests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from django.dispatch import receiver


from django_multitenant.mixins import TenantModelMixin, TenantManagerMixin
from django_multitenant.models import TenantModel
from django_multitenant.fields import TenantForeignKey

Expand Down Expand Up @@ -46,12 +47,32 @@ class ProjectManager(TenantModel):
tenant_id = 'account_id'


class TaskQueryset(models.QuerySet):
def opened(self):
return self.filter(opened=True)

class Task(TenantModel):
def closed(self):
return self.filter(opened=False)


class TaskManager(TenantManagerMixin, models.Manager):
_queryset_class = TaskQueryset

def opened(self):
return self.get_queryset().opened()

def closed(self):
return self.get_queryset().closed()


class Task(TenantModelMixin, models.Model):
name = models.CharField(max_length=255)
project = TenantForeignKey(Project, on_delete=models.CASCADE,
related_name='tasks')
account = models.ForeignKey(Account, on_delete=models.CASCADE)
opened = models.BooleanField(default=True)

objects = TaskManager()

tenant_id = 'account_id'

Expand Down Expand Up @@ -99,7 +120,6 @@ class TenantNotIdModel(TenantModel):
tenant_id = 'tenant_column'



class SomeRelatedModel(TenantModel):
related_tenant = models.ForeignKey(TenantNotIdModel, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
Expand Down
20 changes: 20 additions & 0 deletions django_multitenant/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,26 @@ def test_subquery(self):

unset_current_tenant()

def test_task_manager(self):
from .models import Task

projects = self.projects
account = self.account_fr
tasks = self.tasks

set_current_tenant(account)

self.assertEqual(len(Task.objects.closed()), 0)
self.assertEqual(len(Task.objects.opened()), 50)

task = Task.objects.first()
task.opened = False
task.save()

self.assertEqual(len(Task.objects.closed()), 1)
self.assertEqual(len(Task.objects.opened()), 49)

unset_current_tenant()


class MultipleTenantModelTest(BaseTestCase):
Expand Down

0 comments on commit 1376865

Please sign in to comment.