python - 将旧的基于函数的通用 CRUD View 转换为新样式的基于类的通用 CRUD View

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

我在项目中的很多事情上都使用了 Django 的通用 CRUD View 。我现在想开始迁移到 DJango 1.3 中新型基于类的通用 CRUD View 。我没有发现这些文档有很大帮助,并且可以在转换我的一些基于函数的 View 时使用一些帮助。以下是我的观点片段:

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')
    )

我想我将在第一个 View 中使用 CreateView ,在下一个 View 中使用 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

你们中的一个人可以告诉我重写相同的基于类的 View 吗?一点点的起步将是一个很大的帮助,我相信我可以从那里开始。

谢谢。

最佳答案

在深入研究 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)

关于python - 将旧的基于函数的通用 CRUD View 转换为新样式的基于类的通用 CRUD View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7460695/

相关文章:

python - Django 通用 View 中 get_context_data 和 queryset 之间的区别?

python - PyQt5 拖放到系统文件资源管理器中(带有延迟编码)?

具有常量的 Python 矢量化

mysql - Django mysql客户端安装

python - 如何设置 Model 属性,在 Django 查询中切换 bool 值?

python:无法打开文件 'django-admin.py':[Errno 2] 没有这样的文件或目录

django - 在基于类的通用 View CreateView 中访问 request.user 以便在 Django 中设置 FK 字段

python - python中线性调频的fft振幅

python - 同步 PySCXML