Как добавить дополнительный контекст для просмотра входа на основе классов? - PullRequest
0 голосов
/ 18 января 2020

Ранее я использовал Django==2.0.6, теперь я хочу обновить его до Django==2.2.3. И в ходе некоторых исследований я узнал, что в django -2.1 старые основанные на функциях представления входа в систему, выхода из системы были удалены.

Я все еще хочу добавить дополнительный контекст в LoginView согласно мои требования к проекту ..

Ранее, используя представление на основе функций, я сделал следующее:

 from django.contrib.auth.views import login as auth_views_login

def login(*args, **kwargs):
    """
    Auth Login View
    """
    ecom_company = Ecom_Company.objects.filter(pk=1).first()
    landing_details = Landing.objects.filter(company=ecom_company).first()
    category_list = Categories.objects.filter(
        company=ecom_company).exclude(name__exact='Lab Test').order_by('id')
    partners_list = Partners.objects.filter(
        company=ecom_company).order_by('-id')
    stock_list = StockItem.objects.filter(
        organisation=ecom_company.organisation).order_by('id')

    context = {
        'ecom_company': ecom_company,
        'landing_details': landing_details,
        'category_list': category_list,
        'partners_list': partners_list,
        'stock_list': stock_list
    }

    return auth_views_login(*args, extra_context=context, **kwargs)

И в URL:

url(r'login/$', views.login,
        {'template_name': 'login.html'}, name="login"),

Как передать дополнительный контекст для представления входа в систему на основе классов, так как Django==2.2 не поддерживает вышеуказанное.

1 Ответ

1 голос
/ 18 января 2020

Я думаю, что вы можете использовать LoginView так:

from django.contrib.auth import views as auth_views

class MyLoginView(auth_views.LoginView):
    template_name = 'login.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        ecom_company = Ecom_Company.objects.filter(pk=1).first()
        landing_details = Landing.objects.filter(company=ecom_company).first()
        category_list = Categories.objects.filter(
        company=ecom_company).exclude(name__exact='Lab Test').order_by('id')
        partners_list = Partners.objects.filter(
        company=ecom_company).order_by('-id')
        stock_list = StockItem.objects.filter(
        organisation=ecom_company.organisation).order_by('id')
        context.update({
            'ecom_company': ecom_company,
            'landing_details': landing_details,
            'category_list': category_list,
            'partners_list': partners_list,
            'stock_list': stock_list
        }
        return context

# url
url(r'login/$', views.MyLoginView.as_view(), name="login"),
...