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

问题描述:

我的Django应用程序models.py有以下类:如何在django基于类的视图中运行python脚本?

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 
+0

非常好,非常感谢。 – Rand

如果你想只运行视图类里面的功能,你可以简单地重写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或覆盖model methods功能。

+0

谢谢,这解决了这个问题。但在模型类中重写'save()'函数似乎是一个更好的解决方案。 再次感谢您。 – Rand