【问题标题】:Django DetailView dynamic modelDjango DetailView 动态模型
【发布时间】:2016-06-04 13:55:34
【问题描述】:

我正在尝试为 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()
    ...

但我担心大型数据库会导致性能问题。

提前致谢。

【问题讨论】:

    标签: python django django-models views


    【解决方案1】:

    model_kwarg 获取模型后,您可以覆盖get_queryset() 方法以返回相应模型的查询集。

    要从model_type kwarg 中获取模型,您可以创建一个MODEL_TYPE_KWARGS_TO_MODEL_MAPPING 字典。它将通过使用model_type kwarg 作为键对其执行查找来返回模型。当然,您必须为无效的model_type 情况添加错误处理。

    你可以这样做:

    class DynamicModelUpdate(UpdateView):
    
        def get_queryset(self):
             model = MODEL_TYPE_KWARGS_TO_MODEL_MAPPING[self.kwargs['model_type']]
             return model.objects.all()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 2013-08-04
      • 2019-09-02
      • 2015-08-22
      • 2016-03-17
      • 2018-06-10
      • 2011-12-17
      • 2020-05-27
      相关资源
      最近更新 更多