我如何在django基于类的视图中设置属性以在POST和GET方法中使用?



因此,我正在构建一个基于类的视图,该视图在POST和GET方法上使用数据库上表中的数据。我一直在尝试为表设置一个属性,以减少为了性能而再次拉表所花费的时间。

由于函数/方法的工作方式,我不能像这样设置属性:

class MyClass (View):
@md(login_required(login_url='login',redirect_field_name=None))
def get(self, request):
con = create_engine('mysql+mysqlconnector://user:password@localhost:8000/schema')

#function to get a dict with db tables
tabs  =  get_tables(con)

#Trying to make the attribute
self.table = tabs['table_That_I_need']

context{'data':tabs}
return render(request, 'markowitz/markowitz.html',context)
@md(login_required(login_url='login',redirect_field_name=None))
def post(self, request):

#this gives me an error since the attribute was not set
table = self.table
form = MarkowitzForm(request.POST,table)

if form.is_valid():
pass
return render(request, 'markowitz/results.html')

我一直在尝试使用setattr但它似乎不工作

通过self.table = ...实质上是设置当前实例的属性。Django会为每个请求创建新的实例。这意味着,一个实例的table属性不与另一个实例共享。

你要做的是设置MyClass本身的属性:

def get(...):
...
if not hasattr(self.__class__, 'table'):
# set table attr if not already present
setattr(self.__class__, 'table', tabs['table_That_I_need'])
...

相关内容

  • 没有找到相关文章

最新更新