Django - Как вызвать Detailview в качестве альтернативы UpdateView на основе аутентификации пользователя и pk

Мне нужно, чтобы пользователь2 (без авторизации) видел DetailView вместо UpdateView (который может видеть пользователь1) в качестве альтернативного представления в общем ListView, вызывая соответствующую страницу с объектом PK(title).

Кто-нибудь знает, что является лучшей практикой для достижения этого или где/что я должен искать, чтобы достичь своей цели?

Заранее спасибо!


Details: Не могу понять как это сделать и правильно вызвать Detailview. Я уже создал и UpdateView и DetailView и все что нужно, но мне приходится вызывать их оба из object pk и это не работает.

HTML

{% extends 'base/mybase2.html' %}
{% load static %}
{% block content %}


<h1> List</h1>

<a class="btn btn-outline-info " href="{% url 'home' %}">Back to homepage</a>
<a class="btn btn-sm btn-outline-primary" href="{% url 'a_add' %}">Add</a>
<hr>
            {{ myFilter.form }}
<hr>

<ul>
    <table class="table table-hover table-light table-striped">
        <thead>
          <tr><th scope="col">#Title</th>...</tr>
        </thead>

        <tbody>
             <tr>
               <caption>Total number of selected objects: {{ page_obj.paginator.count }}</caption>
               {% for object in object_list %}
                  {% if perms.varmodel.change_atitle %}
                      <th scope="row"><a href="{{ object.get_absolute_url }}">{{ varmodel.a_number }}</a></th>
                  {% else %}
                      <th scope="row"><a href=#>{{ varmodel.a_description }}</a></th>
                  {% endif %}
               <td>
                  {{ ... }} 
               </td>

УРЛЫ

from django.urls import path

from varapp.views import AListView
from varapp.views import ACreateView, AUpdateView
from varapp.views import ADetailView

urlpatterns = [
    path('', AListView.as_view(), name='a_list'),
    path('add/', ACreateView.as_view(), name='a_add'),
    path('update/<str:pk>/', AUpdateView.as_view(), name='a_update'),
    path('detail/<str:pk>/', ADetailView.as_view(), name='a_detail'),
]

ПРОСМОТРОВ

*Various imports

class AUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
    permission_required = 'aapp.change_a'

    model = A
    form_class = AForm
    success_url = reverse_lazy('a_list')

    def form_valid(self, form):
        form.instance.air_modifier = self.request.user
        return super().form_valid(form)


class ADetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
    permission_required = 'aapp.view_a'

    model = A

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        return context


Вернуться на верх