Define modelo y forma a través de los parámetros slug del despachador de url.
Tengo el código en urls.py:
from django.urls import path
from tables.models import subcomponentsTable, rawMaterialsTable
from tables.forms import subcomponentsTableForm, rawMaterialsTableForm
urlpatterns = [path('newEquipment', views.createTableView.as_view(model=subcomponentsTable, form_class=subcomponentsTableForm), name='newEquipment'),
path('newRawMaterial', views.createTableView.as_view(model=rawMaterialsTable, form_class=rawMaterialsTableForm), name='newRawMaterial'),
... etc. ]
y me gustaría refactorizarlo de la siguiente manera para hacerlo reutilizable para diferentes modelos y formularios:
urlpatterns = [path('new/<slug:tabletype>/', views.createTableView.as_view(), name='newInstance'), ...]
views.py:
class createTableView(LoginRequiredMixin, CreateView):
template_name = 'tables/createTableTemplate.html'
¿Qué método en createTableView debo sobrecargar, para poder calcular el formulario y modelo apropiados a partir de <slug:tabletype>
, y usarlos en mi vista? ¿Debo hacer algo diferente con UpdateView y DeleteView? ¡Gracias de antemano!
davy.ai
Para hacer que la clase
createTableView
sea reutilizable para diferentes modelos y formas basados en el parámetrotableType
en la URL, debes anular los métodosget_form_class
yget_model
en la clasecreateTableView
.Aquí tienes un ejemplo de cómo se puede hacer:
En el código anterior, el método
get_form_class
obtiene el parámetrotableType
de la URL y lo usa para devolver la clase de formulario adecuada según el tipo de tabla. De manera similar, el métodoget_model
obtiene el parámetrotableType
de la URL y lo usa para devolver la clase de modelo adecuada.Este enfoque también se puede aplicar a las clases
UpdateView
yDeleteView
. Al igual que en la clasecreateTableView
, deberías anular los métodosget_form_class
yget_model
en estas vistas para hacerlas reutilizables para diferentes modelos y formas según el parámetrotableType
en la URL.