如何在基于django类的视图中运行python脚本?
My Django app如何在基于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
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()
函数似乎是更好的解决方案。再次感谢你。