Django перенаправляет на другой вид/страницу при отказе в разрешении

Hej!

У меня есть представление, в котором отображаются контактные данные. Цель состоит в том, чтобы некоторые пользователи могли видеть все детали ('A'), а некоторые - только имя ('B'). Поэтому у меня есть два сериализатора в моей модели и два представления (по одному для каждого сериализатора). Пользователи разделены на две группы

@user_passes_test действительно работает, поэтому только те, кто входит в группу 'A', могут попасть в представление с деталями.

Я хочу, чтобы те, которые находятся в группе 'B', автоматически перенаправлялись на вид/страницу, где детали свернуты.

Есть идеи, как этого добиться?

У меня есть:

# views.py
def contacts_check(user):
   return user.groups.filter(name="Contacts = True").exists()


@login_required
@user_passes_test(contacts_check)
def contacts(request):
   .
   .
   .


@login_required
def contacts_small(request):
   .
   .
   .
# urls.py


app_name = "app"
urlpatterns = [
    path("contacts", contacts, name="contacts"),
    path("contacts2", contacts_small, name='contacts2')
]

Я пытался:

@user_passes_test(contacts_check, login_url='contacts')

но обе группы пользователей направляются на url 'contacts' с полным просмотром. ('B' получает ошибку, что у пользователя нет доступа). То же самое, когда login_url='contacts2'.

Я также пробовал:

def sees_contacts(self):
   if str(self.user.groups.filter) == 'Contacts = True':
       return True
   else:
       return False
con_login_required = user_passes_test(lambda u: True if u.sees_individuals else False, login_url='individuals2')


def contacts_login_required(view_func):
   decorated_view_func = login_required(con_login_required(view_func), login_url='contacts2')
   return decorated_view_func

У кого-нибудь есть идеи, что я делаю неправильно?

В urls.py просто используйте один путь

path("contacts/", contacts_view, name="contacts-view"),

then in the method

def contacts_view(request):
    if sees_contacts():
        return contacts(request)
    return contacts_small(request)

Это поможет сохранить шаблоны url менее запутанными для вас и пользователей и позволит вам легко разделять представления.

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