Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在基于django类的视图中运行python脚本?_Python_Django_Django Class Based Views - Fatal编程技术网

如何在基于django类的视图中运行python脚本?

如何在基于django类的视图中运行python脚本?,python,django,django-class-based-views,Python,Django,Django Class Based Views,My Django appmodels.py具有以下类: class Project(models.Model): name = models.CharField(max_length=100) ... from django.views import generic from django.views.generic.edit import CreateView class ProjectCreate(CreateView): model = Project

My Django app
models.py
具有以下类:

class Project(models.Model):
    name = models.CharField(max_length=100)
    ...
from django.views import generic
from django.views.generic.edit import CreateView

class ProjectCreate(CreateView):
    model = Project
    fields = ['name']
我使用基于类的视图,因此我的
views.py
文件具有以下类:

class Project(models.Model):
    name = models.CharField(max_length=100)
    ...
from django.views import generic
from django.views.generic.edit import CreateView

class ProjectCreate(CreateView):
    model = Project
    fields = ['name']
HTTP表单工作得很好,并在数据库中创建了一个新元素,但在创建类
项目
的新实例时,我需要从外部python文件调用一个函数,我尝试运行的代码是:

import script
script.foo(self.object.name)
我试图在类
ProjectCreate
中运行函数
foo
,但我不知道,我尝试使用
get
dispatch
方法,但没有效果,我已经阅读了的文档,但找不到我的答案

我应该使用基于函数的视图吗?或者有基于类的视图的解决方案吗


非常感谢。

如果只想在view类中运行函数,只需重写一个
表单\u有效的
方法:

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

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

如果要在创建每个实例后运行该函数,您可以使用或重写。

您可能希望在模型保存方法中而不是在视图中执行此操作,因此每当创建新实例时都会调用该函数:

class Project(models.Model):
    ...
    def save(self, *args, **kwargs):
        if not self.pk:
            script.foo(self)
        return super(Project, self).save(*args, **kwargs)
如果确定只希望从该视图执行此操作,则可以替代该视图的
form\u valid
方法:

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

谢谢,这就解决了问题。但是重写model类中的
save()
函数似乎是更好的解决方案。再次感谢你。