簡體   English   中英

如何在基於django類的視圖中運行python腳本?

[英]How to run python script in a django class-based view?

我的Django應用程序models.py具有以下類:

class Project(models.Model):
    name = models.CharField(max_length=100)
    ...

我正在使用基於類的視圖,因此我的views.py文件具有以下類:

from django.views import generic
from django.views.generic.edit import CreateView

class ProjectCreate(CreateView):
    model = Project
    fields = ['name']

HTTP形式可以完美運行並在數據庫中創建一個新元素,但是在創建Project類的新實例時,我需要從外部python文件調用函數,我要運行的代碼是:

import script
script.foo(self.object.name)

我正在嘗試在ProjectCreate類中運行函數foo ,但我一無所知,我嘗試使用getdispatch方法,但是它不起作用,我已經閱讀了CreateView的文檔,但找不到答案。

我應該使用基於函數的視圖嗎? 還是有基於類的視圖的解決方案?

非常感謝你。

您可能希望在模型保存方法內而不是在視圖中執行此操作,因此每當創建新實例時都將調用該方法:

class Project(models.Model):
    ...
    def save(self, *args, **kwargs):
        if not self.pk:
            script.foo(self)
        return super(Project, self).save(*args, **kwargs)

如果您確定只希望從該一個視圖執行此操作,則可以改寫該視圖的form_valid方法:

class ProjectCreate(CreateView):
    def form_valid(self, form):
        response = super(ProjectCreate, self).form_valid(form)
        script.foo(self.object)
        return response

如果只想在視圖類內部運行函數,則可以簡單地覆蓋form_valid方法:

class ProjectCreate(CreateView):
    model = Author
    fields = ['name']

    def form_valid(self, form):
        result = super().form_valid(form)
        script.foo(self.object.name)
        return result

如果要在每個實例創建之后運行該函數,則可以使用信號或覆蓋模型方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM