diff --git a/adminsortable/models.py b/adminsortable/models.py index 88e89ea..f90c8ca 100644 --- a/adminsortable/models.py +++ b/adminsortable/models.py @@ -100,35 +100,35 @@ class SortableMixin(models.Model): super(SortableMixin, self).save(*args, **kwargs) - def _filter_objects(self, filters, extra_filters, filter_on_sortable_fk): + def _filter_objects(self, filters, filter_args, extra_filters, filter_on_sortable_fk): if extra_filters: filters.update(extra_filters) if self.sortable_foreign_key and filter_on_sortable_fk: # sfk_obj == sortable foreign key instance sfk_obj = getattr(self, self.sortable_foreign_key.name) - filters.update( - {self.sortable_foreign_key.name: sfk_obj.id}) + filters.update({ self.sortable_foreign_key.name: sfk_obj.id }) try: order_by = '-{0}'.format(self.order_field_name) \ if '{0}__lt'.format(self.order_field_name) in filters.keys() \ else self.order_field_name - obj = self.__class__.objects.filter( - **filters).order_by(order_by)[:1][0] + obj = self.__class__.objects.filter(*filter_args, **filters).order_by(order_by)[:1][0] except IndexError: obj = None return obj - def get_next(self, extra_filters={}, filter_on_sortable_fk=True): + def get_next(self, filter_args=[], extra_filters={}, filter_on_sortable_fk=True): return self._filter_objects( {'{0}__gt'.format(self.order_field_name): self._get_order_field_value()}, + filter_args, extra_filters, filter_on_sortable_fk) - def get_previous(self, extra_filters={}, filter_on_sortable_fk=True): + def get_previous(self, filter_args=[], extra_filters={}, filter_on_sortable_fk=True): return self._filter_objects( {'{0}__lt'.format(self.order_field_name): self._get_order_field_value()}, + filter_args, extra_filters, filter_on_sortable_fk) diff --git a/sample_project/database/test_project.sqlite b/sample_project/database/test_project.sqlite index 944cf22..a3372b8 100644 Binary files a/sample_project/database/test_project.sqlite and b/sample_project/database/test_project.sqlite differ diff --git a/sample_project/samples/migrations/0003_project_isapproved.py b/sample_project/samples/migrations/0003_project_isapproved.py new file mode 100644 index 0000000..9df013e --- /dev/null +++ b/sample_project/samples/migrations/0003_project_isapproved.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1 on 2018-10-06 12:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('samples', '0002_auto_20180319_2117'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='isApproved', + field=models.BooleanField(default=False), + ), + ] diff --git a/sample_project/samples/migrations/0004_project_isfunded.py b/sample_project/samples/migrations/0004_project_isfunded.py new file mode 100644 index 0000000..2c0f714 --- /dev/null +++ b/sample_project/samples/migrations/0004_project_isfunded.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1 on 2018-10-06 13:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('samples', '0003_project_isapproved'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='isFunded', + field=models.BooleanField(default=False), + ), + ] diff --git a/sample_project/samples/models.py b/sample_project/samples/models.py index 35b2611..89b7518 100644 --- a/sample_project/samples/models.py +++ b/sample_project/samples/models.py @@ -49,9 +49,15 @@ class Project(SimpleModel, SortableMixin): category = SortableForeignKey(Category, on_delete=models.CASCADE) description = models.TextField() + isApproved = models.BooleanField(default=False) + isFunded = models.BooleanField(default=False) order = models.PositiveIntegerField(default=0, editable=False) + def get_next(self): + return super(Project, self).get_next( + filter_args=[models.Q(isApproved=True) | models.Q(isFunded=True)]) + # Registered as a tabular inline on `Project` @python_2_unicode_compatible