Как передать переменную из одного представления в другое в Django - PullRequest
0 голосов
/ 19 октября 2018

Я хотел бы передать переменную из одного представления в другое в Django, и я не уверен в лучшем методе.

"DefaultCreateView" ниже представляет собой форму, которая создает новую запись в базе данных и имеет обязательнуюполе, которое я хочу заполнить автоматически (device_id).Так что я думал, что я мог бы передать это в URL.Доступ к этой форме осуществляется с помощью кнопки, показанной в моем шаблоне ниже.Таким образом, идея состоит в том, что первое представление передает переменную в шаблон, где находится кнопка, затем эта кнопка добавляет device_id к URL через href.

Есть ли гораздо более простой / лучший способ сделать это?

Заранее благодарен за любую помощь.

urls.py

urlpatterns = [
    path('<int:pk>/edit/', defaultUpdateView.as_view(), name='default_edit'),
    path('<int:pk>/', defaultDetailView.as_view(), name='default_detail'),
    path('<int:pk>/delete/', defaultDeleteView.as_view(), name='default_delete'),
    path('<int:device>', DefaultsListView.as_view(), name='Default_Listview'),
    path('<int:device>/new/', defaultCreateView.as_view(), name='default_new'),
    path('Defaultsapidata/', apiDefaultsListView.as_view(), name='Defaults_apidata_list'),
    path('<int:pk>/changedefaults/', changeDefaultsViewSingle.as_view()),
]

Views.py

class DefaultsListView(LoginRequiredMixin,ListView):
    model = models.DefaultDMLSProcessParams
    template_name = 'defaults_list.html'
    login_url = 'login'
    def get_queryset(self):
        return super(DefaultsListView, self).get_queryset().filter(device_id=self.kwargs['device'])

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        deviceID = self.kwargs['device']
        context['deviceID'] = deviceID
        return context

class defaultCreateView(LoginRequiredMixin,CreateView):
    model = models.DefaultDMLSProcessParams
    template_name = 'default_new.html'
    fields= ['defaultParamDescrip','processType','processNotes',]
    login_url = 'login'

    def form_valid(self, form):
        form.instance.customerTag = self.request.user.customerTag 
        form.instance.device_id = self.kwargs['device']
        return super().form_valid(form)

defaults_list.html

<a class="btn btn-primary btn-lg" 
href="{% url 'default_new' {{deviceID}}  %}" role="button"> Add New Default Parameter</a>

РЕДАКТИРОВАТЬ Я получаю«NoReverseMatch at / defaults / 41», когда я пытаюсь получить доступ к defaults_list.html, но это решается, когда я изменяю URL defaultCreateView на:

        path('new/', defaultCreateView.as_view(), name='default_new'),

1 Ответ

0 голосов
/ 19 октября 2018
def update_project_filter(request):
...
selected_project_id = project_form.cleaned_data["Project_Name"].id
request.session['selected_project_id'] = selected_project_id
...

def update_project(request):
...
selected_project_id = request.session.get('selected_project_id')
...

Предполагается, что вы активировали "django.contrib.sessions.middleware.SessionMiddleware"

...