Как я могу установить атрибут для использования в методах POST и GET в представлениях на основе классов в django?
Итак, я создаю представление на основе класса, которое использует данные из таблицы в моей базе данных, как в методах 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'])
...