1

我正在尝试实现一个更通用的基于 Django 类的详细视图版本,它可以在需要时对不同的模型进行操作。想法是使用 URL 中的参数设置模型,如下所示:

url(r'^product/view/(?P<bought_in_control_panel_id>\d+)/(?P<item_uuid>'+uuid_re+'/)',
    GenericModelDetailView().as_view(pk_url_kwarg='item_uuid',
                                     template_name='suppliers/products/view_product.html')
    , name='view_product'),

这是我正在使用的类,但 django 抱怨该类没有对象属性。

class GenericModelDetailView(DetailView):

    def __init__(self, *args, **kwargs):
        self.model = get_model_for_bought_in_control_panel(super(GenericModelDetailView, self).get_context_data(**kwargs)['bought_in_control_panel_id'])
        super(GenericModelDetailView, self).__init__(**kwargs)

堆栈跟踪:

  File "django/core/handlers/base.py", line 89, in get_response
    response = middleware_method(request)
  File "django/middleware/common.py", line 67, in process_request
    if (not _is_valid_path(request.path_info, urlconf) and
  File "django/middleware/common.py", line 154, in _is_valid_path
    urlresolvers.resolve(path, urlconf)
  File "django/core/urlresolvers.py", line 342, in resolve
    return get_resolver(urlconf).resolve(path)
  File "django/core/urlresolvers.py", line 252, in resolve
    sub_match = pattern.resolve(new_path)
  File "django/core/urlresolvers.py", line 250, in resolve
    for pattern in self.url_patterns:
  File "django/core/urlresolvers.py", line 279, in _get_url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "django/core/urlresolvers.py", line 274, in _get_urlconf_module
    self._urlconf_module = import_module(self.urlconf_name)
  File "django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/jsoft/jmsdirectory/srv/jmsdirectory/../jmsdirectory/suppliers/urls.py", line 29, in <module>
    GenericModelDetailView().as_view(pk_url_kwarg='item_uuid',
  File "jmsdirectory/suppliers/products.py", line 79, in __init__
    self.model = get_model_for_bought_in_control_panel(super(GenericModelDetailView, self).get_context_data(**kwargs)['bought_in_control_panel_id'])
  File "django/views/generic/detail.py", line 90, in get_context_data
    context_object_name = self.get_context_object_name(self.object)
4

0 回答 0