Ensure total ordering of paginated lists (#3061)

This commit is contained in:
Raphael Michel
2023-02-24 10:51:51 +01:00
committed by GitHub
parent c2d720b3b9
commit 7d4b575150
26 changed files with 232 additions and 77 deletions

View File

@@ -97,7 +97,7 @@ class CheckinList(LoggedModel):
objects = ScopedManager(organizer='event__organizer')
class Meta:
ordering = ('subevent__date_from', 'name')
ordering = ('subevent__date_from', 'name', 'pk')
def positions_query(self, ignore_status=False):
from . import Order, OrderPosition

View File

@@ -612,7 +612,7 @@ class Event(EventMixin, LoggedModel):
class Meta:
verbose_name = _("Event")
verbose_name_plural = _("Events")
ordering = ("date_from", "name")
ordering = ("date_from", "name", "slug")
unique_together = (('organizer', 'slug'),)
def __str__(self):

View File

@@ -72,7 +72,7 @@ class LogEntry(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField(db_index=True)
content_object = GenericForeignKey('content_type', 'object_id')
datetime = models.DateTimeField(auto_now_add=True, db_index=True)
datetime = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey('User', null=True, blank=True, on_delete=models.PROTECT)
api_token = models.ForeignKey('TeamAPIToken', null=True, blank=True, on_delete=models.PROTECT)
device = models.ForeignKey('Device', null=True, blank=True, on_delete=models.PROTECT)
@@ -88,6 +88,9 @@ class LogEntry(models.Model):
class Meta:
ordering = ('-datetime', '-id')
index_together = [
['datetime', 'id']
]
def display(self):
from ..signals import logentry_display

View File

@@ -211,7 +211,7 @@ class Order(LockModel, LoggedModel):
)
secret = models.CharField(max_length=32, default=generate_secret)
datetime = models.DateTimeField(
verbose_name=_("Date"), db_index=True
verbose_name=_("Date"), db_index=False
)
cancellation_date = models.DateTimeField(
null=True, blank=True
@@ -252,7 +252,7 @@ class Order(LockModel, LoggedModel):
null=True, blank=True
)
last_modified = models.DateTimeField(
auto_now=True, db_index=True
auto_now=True, db_index=False
)
require_approval = models.BooleanField(
default=False
@@ -268,7 +268,11 @@ class Order(LockModel, LoggedModel):
class Meta:
verbose_name = _("Order")
verbose_name_plural = _("Orders")
ordering = ("-datetime",)
ordering = ("-datetime", "-pk")
index_together = [
["datetime", "id"],
["last_modified", "id"],
]
def __str__(self):
return self.full_code
@@ -2618,7 +2622,6 @@ class Transaction(models.Model):
)
datetime = models.DateTimeField(
verbose_name=_("Date"),
db_index=True,
)
migrated = models.BooleanField(
default=False
@@ -2669,6 +2672,9 @@ class Transaction(models.Model):
class Meta:
ordering = 'datetime', 'pk'
index_together = [
['datetime', 'id']
]
def save(self, *args, **kwargs):
if not self.fee_type and not self.item:

View File

@@ -93,7 +93,7 @@ class Organizer(LoggedModel):
class Meta:
verbose_name = _("Organizer")
verbose_name_plural = _("Organizers")
ordering = ("name",)
ordering = ("name", "slug")
def __str__(self) -> str:
return self.name

View File

@@ -112,7 +112,7 @@ class WaitingListEntry(LoggedModel):
class Meta:
verbose_name = _("Waiting list entry")
verbose_name_plural = _("Waiting list entries")
ordering = ('-priority', 'created')
ordering = ('-priority', 'created', 'pk')
def __str__(self):
return '%s waits for %s' % (str(self.email), str(self.item))