es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que la clase createTableView sea reutilizable para diferentes modelos y formas basados en el parámetro tableType en la URL, debes anular los métodos get_form_class y get_model en la clase createTableView.

    Aquí tienes un ejemplo de cómo se puede hacer:

    class createTableView(LoginRequiredMixin, CreateView):
        template_name = 'tables/createTableTemplate.html'
    
        def get_form_class(self):
            # Obtener el tableType de la URL
            tableType = self.kwargs.get('tableType')
    
            # Usar el tableType para obtener la clase de formulario apropiada
            if tableType == 'subcomponents':
                return subcomponentsTableForm
            elif tableType == 'rawMaterials':
                return rawMaterialsTableForm
            # Agregar más declaraciones elif para otros tipos de tabla según sea necesario
    
        def get_model(self):
            # Obtener el tableType de la URL
            tableType = self.kwargs.get('tableType')
    
            # Usar el tableType para obtener la clase de modelo apropiada
            if tableType == 'subcomponents':
                return subcomponentsTable
            elif tableType == 'rawMaterials':
                return rawMaterialsTable
            # Agregar más declaraciones elif para otros tipos de tabla según sea necesario
    

    En el código anterior, el método get_form_class obtiene el parámetro tableType de la URL y lo usa para devolver la clase de formulario adecuada según el tipo de tabla. De manera similar, el método get_model obtiene el parámetro tableType de la URL y lo usa para devolver la clase de modelo adecuada.

    Este enfoque también se puede aplicar a las clases UpdateView y DeleteView. Al igual que en la clase createTableView, deberías anular los métodos get_form_class y get_model en estas vistas para hacerlas reutilizables para diferentes modelos y formas según el parámetro tableType en la URL.

Comments are closed.