Как я могу установить атрибут для использования в методах 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'])
    ...
Вернуться на верх