因此,我正在构建一个基于类的视图,该视图在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'])
...