Code reference › models › common

class

OrderedModel

pretalx.common.models.mixins.OrderedModel source

Provides methods to move a model up and down in a queryset.

Implement the get_order_queryset method as a classmethod or staticmethod to provide the queryset to order.

Attributes 1

order_field'position'

Properties 1

Defined here

order_querysetsource
@property
def order_queryset(self):
    return self.get_order_queryset(event=self.event)

Methods 2

Defined here

get_order_queryset(**kwargs)source
@staticmethod
def get_order_queryset(**kwargs):
    raise NotImplementedError
move(up=True)source
def move(self, up=True):
    queryset = list(self.order_queryset.order_by(self.order_field))
    index = queryset.index(self)
    if index != 0 and up:
        queryset[index - 1], queryset[index] = queryset[index], queryset[index - 1]
    elif index != len(queryset) - 1 and not up:
        queryset[index + 1], queryset[index] = queryset[index], queryset[index + 1]

    for index, element in enumerate(queryset):
        if element.position != index:
            element.position = index
            element.save()