【问题标题】:Django: Call custom function within generic viewsDjango:在通用视图中调用自定义函数
【发布时间】:2020-07-04 10:03:24
【问题描述】:

我是 Django 新手,正在使用 Django 的 generic editing views 添加/编辑/删除实体。例如,添加和编辑的视图如下所示:

class QuoteCreate(CreateView):
    template_name = 'quotes/quote_form.html'
    model = Quote
    fields = ['quote_text']


class QuoteUpdate(UpdateView):
    model = Quote
    fields = ['quote_text']

这很好用,我对所有内容的渲染方式都很满意。每当创建或编辑新对象(向自己发送通知)时,我只想调用一个额外的自定义函数。我怎样才能做到这一点?我在文档中找不到任何有用的东西。

【问题讨论】:

    标签: python django function django-generic-views


    【解决方案1】:

    您可以在另一个视图中调用视图,在您的示例中可能如下所示:

    views.py

    class QuoteCreate(CreateView):
        template_name = 'quotes/quote_form.html'
        model = Quote
        fields = ['quote_text']
        object_change = notify_function(foo)
    
    
    class QuoteUpdate(UpdateView):
        model = Quote
        fields = ['quote_text']
        return = fields
        object_change = notify_function(foo)
    
    
    def notify_function(foo):
        # whatever logic is desired to be notified
        return [..]
    

    【讨论】:

    • 所以这会从创建视图中调用我的更新视图?我想要的是在当前逻辑之外调用自定义函数?我仍然希望使用 Django 的通用视图来创建和更新对象,就像他们目前所做的那样。我只想有一个额外的函数调用来记录该(以及哪个)对象被创建/更新。我不想自己实现创建/更新/渲染。
    • @CGFoX 啊,现在明白了。然后我建议设置一个新函数并基本上在 CreateView 和 UpdateView 中调用它
    • 谢谢,这是正确的方向。但是将函数添加为object_change 属性会导致在我启动服务器时调用该函数一次,但不会在创建/更新引用/对象时调用该函数(这是我想要的)。我在这里做错了什么还是我需要使用的另一个属性?有没有关于object_change 之类的文档?
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2015-02-13
    • 1970-01-01
    • 2012-11-25
    • 2011-04-22
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多