Add Positional Arguments to Get Next/Previous
Added filter_args array argument to be passed to get_next/previous methods. Added extra boolean fields to project model for testing.master
parent
2688003ac9
commit
fabd78e5be
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -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),
|
||||
),
|
||||
]
|
||||
|
|
@ -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),
|
||||
),
|
||||
]
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue