Skip to content

add a way to display transitions of related models into admin#94

Open
DorianArdian wants to merge 2 commits intogadventures:masterfrom
DorianArdian:master
Open

add a way to display transitions of related models into admin#94
DorianArdian wants to merge 2 commits intogadventures:masterfrom
DorianArdian:master

Conversation

@DorianArdian
Copy link

@DorianArdian DorianArdian commented Mar 10, 2022

Objectives

This change add a way to display transitions that are defined in related models (foreign keys, one to one fields) into models admins.

Example

In the example below, the car admin we will be able to display wheel transitions

class Wheel(BaseModel):
    orientation = FSMField(default="CENTER", choices=["LEFT", "CENTER", "RIGHT"], protected=True)

    @transition(
        field=orientation,
        source=["CENTER"],
        target="LEFT",
        custom=dict(admin=True),
    )
    def turn_left(self):
        pass

class Car(BaseModel):
    status = FSMField(default="STOP", choices=["STOP", "START"], protected=True)

    wheel = models.OneToOneField(
        Wheel,
        related_name="car",
        on_delete=models.CASCADE,
        null=True,
        blank=True,
    )

    @transition(
        field=status,
        source=["STOP"],
        target="START",
        custom=dict(admin=True),
    )
    def start(self):
        pass

@admin.register(Car)
class CarAdmin(FSMTransitionMixin, admin.ModelAdmin):
    readonly_fields = ["status"]
    fsm_field = ["status"]
    list_display = ["status",]
    fields = readonly_fields

    # because we add this parameter it will displays "turn_left" transition into CarAdmin change form
    # in addition to car start transition
    foreign_keys = ["wheel"] 

Co-authored-by: Antoine Garcia <a.garcia.walecha@gmail.com>
def _get_fsm_field_list(self, obj):
return list(
return [field.name for field in obj._meta.fields if isinstance(field, FSMField)]
filter(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

filter à supprimer du coup

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants