Неверное перенаправление на данные профиля пользователя - PullRequest
0 голосов
/ 02 мая 2020

Если пользователь является сотрудником, он увидит список пользователей и данные их профиля, а также данные своего профиля. Если нет, он увидит только данные своего профиля.

models.py

class UserProfile(AbstractUser):

    def __str__(self):
        return self.username

    def get_absolute_url(self):
        return reverse("user_details", kwargs={"username":self.username})

views.py

def usersList(request):
    """
    The list of all users
    """
    if request.user.is_superuser:
        users_list = UserProfile.objects.all()
    elif request.user.is_staff:
        users_list = UserProfile.objects.filter(is_staff=False)
    else:
        raise PermissionDenied
    template = 'usermanager/users_list.html'
    context = {
        'users': users_list,
    }
    return render(request, template, context)

def userDetails(request, username):
    """
    User details
    """
    user_details = get_object_or_404(UserProfile, username=username)

    template = 'usermanager/user_details.html'
    context = {
        'user_details': user_details,
    }
    return render(request, template, context)

urls.py

path('user-list/', views.usersList, name='users'),
path('<username>/', views.userDetails, name='user_details'),

users_list. html

  {% for user in users %}
  <h1>{{ user.username }}</h1>
  <p>Name: {{ user.first_name }}</p>
  <p>Surname: {{ user.last_name }}</p>
  <p>Email: {{ user.email }}</p>
  {% if request.user.is_superuser %}
    {% if user.is_staff %}
    <button class="btn btn-warning">Staff</button>
    {% else %}
    <button class="btn btn-primary">User</button>
    {% endif %}
  {% endif %}
  <a class="btn btn-danger" href="{% url 'user_details' username=user.username %}">Details</a>
  <hr>
  {% endfor %}

user_details. html

{% if request.user == user %}
<h1>Your profile</h1>
{% else %}
<h1>Profile of {{ user.username }}</h1>
{% endif %}
<hr>
<div class="container">
  <p>Name: {{ user.first_name }}</p>
  <p>Surname: {{ user.last_name }}</p>
  <p>Email: {{ user.email }}</p>
  {% if request.user.is_superuser %}
    {% if user.is_staff %}
    <button class="btn btn-warning">Staff</button>
    {% else %}
    <button class="btn btn-primary">User</button>
    {% endif %}
  {% endif %}
  <p>Joined: {{ user.date_joined }}</p>
  <p>Last login: {{ user.last_login }}</p>
  {% if user.is_active %}
  <button class="btn btn-success">Active</button>
  {% else %}
  <button class="btn btn-secondary">Inactive</button>
  {% endif %}
</div>

Я правильно вижу список всех пользователей. Bob является одним из моих пользователей, если я нажимаю на его данные, я вижу свой личный профиль. Это происходит для всех деталей пользователей, я всегда вижу свой профиль. Я вошел как суперпользователь.

В чем я не прав?

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Ваш объект для user_Details - {{user_details}}, поэтому вы должны использовать его в качестве переменной в шаблоне:

{% if request.user == user_details %} и так далее. Это должно решить вашу проблему.

Но, как объяснено здесь, в документе , переменная шаблона user уже используется Django, чтобы позволить вам увидеть фактическую информацию пользователя.

В вашем шаблоне списка пользователей у вас нет этой проблемы, потому что вы переопределяете переменную user с помощью for.

Другая рекомендация: избегать переопределения переменной user в шаблоне. например в вашем списке пользователей:

{% for usr in users %}
    <h1>{{ usr.username }}</h1>
    <p>Name: {{ usr.first_name }}</p>
    <p>Surname: {{ usr.last_name }}</p>
    <p>Email: {{ usr.email }}</p>
    {% if request.user.is_superuser %}
      {% if usr.is_staff %}
      <button class="btn btn-warning">Staff</button>
      {% else %}
      <button class="btn btn-primary">User</button>
      {% endif %}
    {% endif %}
    <a class="btn btn-danger" href="{% url 'user_details' username=usr.username %}">Details</a>
    <hr>
    {% endfor %}
0 голосов
/ 02 мая 2020

Это моя глупая ошибка ... Контекст userDetails равен user_details, но я использую user внутри шаблона

...