如何在基于 django class 的视图中 运行 python 编写脚本?
How to run python script in a django class-based view?
我的 Django 应用 models.py
具有以下 class:
class Project(models.Model):
name = models.CharField(max_length=100)
...
我正在使用基于 class 的视图,因此我的 views.py
文件具有以下 class:
from django.views import generic
from django.views.generic.edit import CreateView
class ProjectCreate(CreateView):
model = Project
fields = ['name']
HTTP 表单完美运行并在数据库中创建了一个新元素,但我需要在创建 class [的新实例时从外部 python 文件调用一个函数=18=],我尝试 运行 的代码是:
import script
script.foo(self.object.name)
我正在尝试 运行 class ProjectCreate
中的函数 foo
但我一无所知,我尝试使用 get
和 dispatch
方法,但它没有用,我已经阅读了 CreateView 的文档,但我找不到我的答案。
我应该使用基于函数的视图吗?或者是否有基于 class 的视图的解决方案?
非常感谢。
如果你想 运行 你的函数只在视图中 class 你可以简单地覆盖 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
如果您想 运行 在每个实例创建后使用该函数,您可以使用 signals or override model methods。
您可能希望在模型保存方法中执行此操作,而不是在视图中执行此操作,因此每当创建新实例时都会调用它:
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
我的 Django 应用 models.py
具有以下 class:
class Project(models.Model):
name = models.CharField(max_length=100)
...
我正在使用基于 class 的视图,因此我的 views.py
文件具有以下 class:
from django.views import generic
from django.views.generic.edit import CreateView
class ProjectCreate(CreateView):
model = Project
fields = ['name']
HTTP 表单完美运行并在数据库中创建了一个新元素,但我需要在创建 class [的新实例时从外部 python 文件调用一个函数=18=],我尝试 运行 的代码是:
import script
script.foo(self.object.name)
我正在尝试 运行 class ProjectCreate
中的函数 foo
但我一无所知,我尝试使用 get
和 dispatch
方法,但它没有用,我已经阅读了 CreateView 的文档,但我找不到我的答案。
我应该使用基于函数的视图吗?或者是否有基于 class 的视图的解决方案?
非常感谢。
如果你想 运行 你的函数只在视图中 class 你可以简单地覆盖 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
如果您想 运行 在每个实例创建后使用该函数,您可以使用 signals or override model methods。
您可能希望在模型保存方法中执行此操作,而不是在视图中执行此操作,因此每当创建新实例时都会调用它:
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