lino.mixins.sequenced¶
Defines the model mixins Sequenced
and
Hierarchical
.
A Sequenced is something which has a sequence number and thus a sort
order which can be manipulated by the user using actions
MoveUp
and MoveDown
.
Hierarchical
is a Sequenced
with a parent field.
(This module's source code is available here.)
Classes
|
Duplicate this row. |
|
Model mixin for things that have a "parent" and "siblings". |
|
Move this row N rows upwards or downwards. |
|
Move this row one row downwards. |
|
Move this row one row upwards. |
|
Mixin for models that have a field |
-
class
lino.mixins.sequenced.
MoveByN
(label=None, **kwargs)¶ Bases:
lino.core.actions.Action
Move this row N rows upwards or downwards.
This action is available on any
Sequenced
object asSequenced.MoveByN
.It is currently only used by React to allow for drag and drop reording.
-
class
lino.mixins.sequenced.
MoveUp
(label=None, **kwargs)¶ Bases:
lino.core.actions.Action
Move this row one row upwards.
This action is available on any
Sequenced
object asSequenced.move_up
.
-
class
lino.mixins.sequenced.
MoveDown
(label=None, **kwargs)¶ Bases:
lino.core.actions.Action
Move this row one row downwards.
This action is available on any
Sequenced
object asSequenced.move_down
.
-
class
lino.mixins.sequenced.
DuplicateSequenced
(label=None, **kwargs)¶ Bases:
lino.mixins.duplicable.Duplicate
Duplicate this row.
-
class
lino.mixins.sequenced.
Sequenced
(*args, **kwargs)¶ Bases:
lino.mixins.duplicable.Duplicable
Mixin for models that have a field
seqno
containing a "sequence number".-
seqno
¶ The sequence number of this item with its parent.
-
duplicate
()¶ Create a duplicate of this object and insert the new object below this one.
Implemented by
DuplicateSequenced
-
move_action_names
= ('move_up', 'move_down', 'duplicate')¶ The names of the actions to display in the move_buttons column.
Overridded by
lino.modlib.notify.models.Widget
where the duplicate button would be irritating.
-
get_siblings
()¶ Return a Django Queryset with all siblings of this, or None if this is a root element which cannot have any siblings.
Siblings are all objects that belong to a same sequence. This is needed for automatic management of the seqno field.
The queryset will of course include self.
The default implementation uses a global sequencing by returning all objects of self's model.
A common case for overriding this method is when numbering restarts for each master. For example if you have a master model Product and a sequenced slave model Property with a ForeignKey field product which points to the Product, then you'll define:
class Property(dd.Sequenced): def get_siblings(self): return Property.objects.filter( product=self.product)
Overridden e.g. in
lino_xl.lib.thirds.models.Third
orlino_welfare.modlib.debts.models.Entry
.
-
set_seqno
()¶ Initialize seqno to the seqno of eldest sibling + 1.
-
seqno_changed
(ar)¶ If the user manually assigns a seqno.
-
-
class
lino.mixins.sequenced.
Hierarchical
(*args, **kwargs)¶ Bases:
lino.mixins.duplicable.Duplicable
Model mixin for things that have a "parent" and "siblings".
Pronounciation: [hai'ra:kikl]
-
get_parental_line
()¶ Return an ordered list of all ancestors of this instance.
The last element of the list is this. A top-level project is its own root.
-
whole_clan
()¶ Return a set of this instance and all children and grandchildren.
-