Добавить LocatorField в DjangoTgBotFramework
Для каждой стейт-машины приходится копировать один и тот же код сериализации/десериализации данных из моделей Django:
lead.state_machine_locator = crawler.current_state.locator.dict(by_alias=True)
restored_locator = Locator.parse_obj(session.session_db_object.state_machine_locator)
Также каждый раз приходится настраивать виджет для админки:
class ConversationAdminForm(forms.ModelForm):
class Meta:
widgets = {
'state_machine_locator': JSONEditorWidget(
attrs={
'style': 'width: 100%; max-width: 1000px; display:inline-block; height:250px;',
},
),
}
От всем этой копипасты хорошо бы избавиться через создание кастомного поля Django ORM -- LocatorField:
- После чтения из БД в атрибуте нём сразу лежит инстанс
Locatorвместо словаря - Для записи полю достаточно присвоить новый инстанс
Locator - Для админки предоставляется готовый виджет, напоминающий JSONField со специфическими доп.функциями