Changes sync

This commit is contained in:
Mikhail Podgurskiy
2025-03-19 12:34:44 +05:00
parent 89536a5b30
commit 803db34f6c
4 changed files with 43 additions and 9 deletions

View File

@@ -2,6 +2,12 @@
Changelog
=========
2.3.x GIT VERSION
-----------------
- Add viewset get_form_class/get_create_form_class/get_update_form_class to allow per-request form customization for CRUD Views
2.2.9 2025-01-08
----------------

View File

@@ -5,19 +5,19 @@
# 'COMM_LICENSE', which is part of this source code package.
from enum import Enum
from typing import List, Set, Tuple
from typing import List, Set, Tuple, Union
from django.db.models import Choices
from .base import State, StateDescriptor, Transition
from .typing import StateValue
def get_state_name(state_value):
def get_state_name(state_value: StateValue) -> str:
if isinstance(state_value, Enum):
return str(state_value.value)
return str(state_value)
def get_state_label(state_value):
def get_state_label(state_value: StateValue) -> str:
if isinstance(state_value, Choices):
return state_value.label
elif isinstance(state_value, Enum):

View File

@@ -65,16 +65,30 @@ class CreateModelView(
if self.viewset is not None and hasattr(self.viewset, "get_queryset"):
return self.viewset.get_queryset(self.request)
return None
def get_form_widgets(self):
if self.form_widgets is not None:
return self.form_widgets
elif self.viewset and hasattr(self.viewset, "get_create_form_widgets"):
return self.viewset.get_create_form_widgets(self.request)
elif self.viewset and hasattr(self.viewset, "get_form_widgets"):
return self.viewset.get_form_widgets(self.request)
return None
def get_form_class(self):
if self.form_class is None:
if self.form_class is not None:
return self.form_class
elif self.viewset and hasattr(self.viewset, "get_create_form_class"):
return self.viewset.get_create_form_class(self.request)
elif self.viewset and hasattr(self.viewset, "get_form_class"):
return self.viewset.get_form_class(self.request)
else:
return modelform_factory(
self.model,
form=ModelForm,
fields=self.fields,
widgets=self.form_widgets,
widgets=self.get_form_widgets(),
)
return self.form_class
def get_template_names(self):
"""

View File

@@ -75,16 +75,30 @@ class UpdateModelView(
if self.viewset is not None and hasattr(self.viewset, "get_queryset"):
return self.viewset.get_queryset(self.request)
return None
def get_form_widgets(self):
if self.form_widgets is not None:
return self.form_widgets
elif self.viewset and hasattr(self.viewset, "get_update_form_widgets"):
return self.viewset.get_update_form_widgets(self.request)
elif self.viewset and hasattr(self.viewset, "get_form_widgets"):
return self.viewset.get_form_widgets(self.request)
return None
def get_form_class(self):
if self.form_class is None:
if self.form_class is not None:
return self.form_class
elif self.viewset and hasattr(self.viewset, "get_update_form_class"):
return self.viewset.get_update_form_class(self.request)
elif self.viewset and hasattr(self.viewset, "get_form_class"):
return self.viewset.get_form_class(self.request)
else:
return modelform_factory(
self.model,
form=ModelForm,
fields=self.fields,
widgets=self.form_widgets,
widgets=self.get_form_widgets(),
)
return self.form_class
def get_object(self):
pk = self.kwargs.get(self.pk_url_kwarg)