Django DetailView 动态模型
Django DetailView dynamic model
我正在尝试为 Django 应用程序的多个模型创建一个视图。该应用程序基本上是一个具有一些自定义功能的管理后台。
在每个项目的更新视图中,我认为最好只定义一个DetailView并动态获取模型名称。
1) 这是一种正确的方法还是每个模型一个 DetailView 更好?
2)可能吗?如果可以,怎么办?
views.py
class EquipoUpdate(UpdateView):
model = DYNAMIC_MODEL
fields = ['codigo', 'equipo', 'nombre', 'fabricante', 'modelo', 'fecha_alta', 'fecha_baja', 'descripcion','datos_contacto']
success_url = reverse_lazy('listados-mantenimiento', kwargs={'model_type': 'componentes'})
template_name = 'manager/mto/mto_update.html'
urls.py
url(r'^mantenimiento/(?P<model_type>\w{0,50})/update/(?P<pk>\d+)$', views.EquipoUpdate.as_view()),
DYNAMIC_MODEL
是我想从 urls.py model_type
得到的变量
我的第一个方法是使用 def get_context_data
:
def get_context_data(self, **kwargs):
modelo = self.kwargs['model_type']
context = super(MtoListView, self).get_context_data(**kwargs)
if (modelo == 'equipos'):
context['listado'] = Equipo.objects.all()
elif (modelo == 'componentes'):
context['listado'] = Componente.objects.all()
...
但我担心大数据库会导致性能问题。
提前致谢。
从 model_kwarg
获取模型后,您可以将 get_queryset()
方法重写为 return 适当模型的查询集。
要从 model_type
kwarg 中获取模型,您可以创建一个 MODEL_TYPE_KWARGS_TO_MODEL_MAPPING
字典。它将通过使用 model_type
kwarg 作为键对其执行查找来 return 模型。当然,您必须为无效 model_type
个案例添加错误处理。
您可以这样做:
class DynamicModelUpdate(UpdateView):
def get_queryset(self):
model = MODEL_TYPE_KWARGS_TO_MODEL_MAPPING[self.kwargs['model_type']]
return model.objects.all()
我正在尝试为 Django 应用程序的多个模型创建一个视图。该应用程序基本上是一个具有一些自定义功能的管理后台。
在每个项目的更新视图中,我认为最好只定义一个DetailView并动态获取模型名称。
1) 这是一种正确的方法还是每个模型一个 DetailView 更好?
2)可能吗?如果可以,怎么办?
views.py
class EquipoUpdate(UpdateView):
model = DYNAMIC_MODEL
fields = ['codigo', 'equipo', 'nombre', 'fabricante', 'modelo', 'fecha_alta', 'fecha_baja', 'descripcion','datos_contacto']
success_url = reverse_lazy('listados-mantenimiento', kwargs={'model_type': 'componentes'})
template_name = 'manager/mto/mto_update.html'
urls.py
url(r'^mantenimiento/(?P<model_type>\w{0,50})/update/(?P<pk>\d+)$', views.EquipoUpdate.as_view()),
DYNAMIC_MODEL
是我想从 urls.py model_type
我的第一个方法是使用 def get_context_data
:
def get_context_data(self, **kwargs):
modelo = self.kwargs['model_type']
context = super(MtoListView, self).get_context_data(**kwargs)
if (modelo == 'equipos'):
context['listado'] = Equipo.objects.all()
elif (modelo == 'componentes'):
context['listado'] = Componente.objects.all()
...
但我担心大数据库会导致性能问题。
提前致谢。
从 model_kwarg
获取模型后,您可以将 get_queryset()
方法重写为 return 适当模型的查询集。
要从 model_type
kwarg 中获取模型,您可以创建一个 MODEL_TYPE_KWARGS_TO_MODEL_MAPPING
字典。它将通过使用 model_type
kwarg 作为键对其执行查找来 return 模型。当然,您必须为无效 model_type
个案例添加错误处理。
您可以这样做:
class DynamicModelUpdate(UpdateView):
def get_queryset(self):
model = MODEL_TYPE_KWARGS_TO_MODEL_MAPPING[self.kwargs['model_type']]
return model.objects.all()