Skip to content

Conversation

@Superredstone
Copy link

Using a custom storage like the following Python does not call the setter method, not saving anything inside the database

class DbStorage(BaseStorage):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        session = self.get_session()
        if not WizardStep.objects.filter(session=session).exists():
            self.init_data()

    def get_session(self): 
        return Session.objects.get(session_key=self.request.session.session_key)

    def get_db_safe(self) -> OnboardingWizardStep:
        defaults = {"payload": {'step': None, 'step_data': {}, 'step_files': {}, 'extra_data': {}}}
        s, _ = WizardStep.objects.get_or_create(session=self.get_session(), defaults=defaults)
        return s

    @property
    def data(self):
        return self.get_db_safe().payload

    @data.setter
    def data(self, value):
        s = self.get_db_safe()
        s.payload = value
        s.save()

The following two functions inside wizard/storage/base.py without a temporary value do not allow for saving

    def _get_current_step(self):
        return self.data[self.step_key]

    def _set_current_step(self, step):
        self.data[self.step_key] = step

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.

1 participant