【问题标题】:(GCBV) How to call custom method to publish blog (UpdateView)(GCBV) 如何调用自定义方法发布博客 (UpdateView)
【发布时间】:2016-02-20 19:46:25
【问题描述】:

美好的一天!

除了 Java,我正在尝试学习一些 Python/Django,因为我工作的公司也将使用 Django。但是,我试图弄清楚如何使用基于通用类的视图。我希望有人能给我一些信息来指导我正确的方向来解决我的问题。

我有一个小型博客应用程序,其中包含具有 GCBV(基于通用类的视图)的 CRUD(创建、读取、更新、删除)功能。在详细信息视图中,我有一个要发布的链接:

{% url 'blogs:publish' blog.pk %}

我想像这样使用:

url(r'^(?P[0-9]+)/publish/$', xxx, name='publish')

我就是无法让它工作。我已经尝试(和类似的尝试)在 Update(UpdateView) 类中创建一个名为 publish(self, **kwargs): 的方法,并使用 url 模式来调用它:

url(r'^(?P[0-9]+)/publish/$', views.Update.publish(), name='publish')

这显然行不通,否则您现在不会阅读此内容;)我已经阅读了很多文档/谷歌/等,但主要是基于函数的,或者教程在 CRUD 之后停止。您能否将我推向正确的方向(提示/清除教程/示例)或解释我选择错误的地方?提前致谢!

【问题讨论】:

    标签: django django-class-based-views url-pattern resolveurl


    【解决方案1】:

    UpdateView是用来更新的,你可以看看CreateView。它用于创建对象。

    您还需要了解,您不能调用方法,因为很难想象它是如何工作的。 GCBV 只是一系列已经编写好的方法,可以让你的生活更轻松。您可以覆盖 GCBV 基本方法并创建自己的方法,然后可以在视图中使用它们,但不能在 url 中调用它们。

    【讨论】:

    • 感谢您的回复。创建博客时,它始终未发布,详细视图显示要发布的链接。如何使该链接正确发布博客?
    • @Nrzonline,您需要做的就是创建一个链接并将url 映射到它,您将在其中捕获objectpk。在此之后,您需要编写一个视图,该视图将使用在 url 中捕获的 pk 获取对象实例并更新对象的归档 object.published = True,之后您只需保存对象并返回 HttpResponseRedirect。在这种情况下可以使用函数基础视图。如果您不想重新加载页面,也可以使用 ajax,但这取决于您要做什么。
    • 谢谢。对我来说,感觉就像我必须将它包装到 GCBV 中,我实际上不知道为什么。无论如何,它现在正在工作。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多