【问题标题】:Converting old function-based generic CRUD views to the new style class-based generic CRUD views将旧的基于函数的通用 CRUD 视图转换为新样式的基于类的通用 CRUD 视图
【发布时间】:2011-11-19 14:45:52
【问题描述】:

在我的项目中,我一直在使用 Django 的通用 CRUD 视图来处理很多事情。我现在想开始迁移到 DJango 1.3 中基于类的新样式通用 CRUD 视图。我没有发现文档很有帮助,并且可以使用一些帮助来转换我的一些基于函数的视图。以下是我的观点:

def create_domains(request, *args, **kwargs):
    return create_object(request=request, form_class=DomainForm,
        template_name='customer/create_domains.html',
        post_save_redirect=reverse('manage_domains')
    )

def delete_domains(request, object_id, *args, **kwargs):
    return delete_object(request=request,
        object_id=object_id, model=Domain,
        template_name='customer/delete_domains.html',
        post_delete_redirect=reverse('manage_domains')
    )

我想我会为第一个使用CreateView,下一个使用DeleteView。到目前为止,这是我想出的:

class DomainCreateView(CreateView):
    form_class = DomainForm
    template_name = 'create_domains.html'
    success_url = 'manage_domains'

class DomainDeleteeView(CreateView):
    model = Domain
    template_name = 'delete_domains.html'
    success_url = 'manage_domains'
    pk_url_kwarg = object_id

你们中的哪一个可以告诉我重写一个基于类的视图吗?一个小小的跳跃开始会有很大的帮助,我相信我可以从那里开始。

谢谢。

【问题讨论】:

    标签: python django django-generic-views django-class-based-views


    【解决方案1】:

    在挖掘了 Django 源代码后,我发现了如何做到这一点。

    class DomainCreateView(CreateView):
        """
        Creates a Domain
        """
        form_class = DomainForm
        template_name = 'customer/create_domains.html'
        success_url = reverse_lazy('manage_domains')
    
        @method_decorator(login_required)
        @method_decorator(only_managers_allowed)
        def dispatch(self, *args, **kwargs):
            """
            The Dispatcher
            """
            return super(DomainCreateView, self).dispatch(*args, **kwargs)
    
        def form_valid(self, form):
            """
            Validate and save the form
            """
            company = self.request.user.get_profile().company
            self.object = form.save(company)
            return super(ModelFormMixin, self).form_valid(form)
    
    
    class DomainDeleteView(DeleteView):
        """
        Deletes a Domain
        """
        model = Domain
        template_name = 'customer/delete_domains.html'
        success_url = reverse_lazy('manage_domains')
    
        @method_decorator(login_required)
        @method_decorator(only_managers_allowed)
        def dispatch(self, *args, **kwargs):
            """
            The Dispatcher
            """
            return super(DomainDeleteView, self).dispatch(*args, **kwargs)
    

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 2023-03-06
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2013-01-25
      相关资源
      最近更新 更多