#django #django-views
#django #django-представления
Вопрос:
В настоящее время я зарегистрирован как «администратор» в моем проекте django3. Как «администратор», я должен отображать все книги. Но if-else
утверждение в views.py не распознает «admin» и всегда переходит в else
раздел условного оператора.
def book_list(request):
print ('Currently logged as ', request.user)
if request.user == 'admin':
print ('All')
books = Book.objects.all()
else:
print ('Filter')
books = Book.objects.filter(author=request.user)
return render(request, 'mtsAuthor/book_list.html', {
'books': books
})
Когда я обновляю страницу как «администратор», в терминале отображаются следующие пользовательские сообщения отладки. Надеюсь, то же самое поможет устранить неполадки.
Currently logged as admin
Filter
[25/Feb/2021 13:39:45] "GET /mtsAuthor/books/ HTTP/1.1" 200 9363
[25/Feb/2021 13:39:45] "GET /media/books/covers/_DSC0179.jpg HTTP/1.1" 304 0
Ответ №1:
Если вы хотите проверить это на основе имени пользователя:
if request.user.username = 'admin'
И если вы хотите проверить это на основе суперпользователя:
if request.user.is_superuser
Ответ №2:
попробуйте это:
if request.user.is_superuser
Комментарии:
1. Спасибо! Но интересно, почему if-else работает странно?
2. Поскольку он не знает, о чем судить, вы должны предоставить ему такие атрибуты, как usernname, is_active, request.user является экземпляром.
3. @chandra if-else работает странно, потому
request.user
что это словарь. Вы сравниваете объект, подобный dict, со строковым объектом со значением «admin».print(dict(request.user))
Попытайтесь увидеть значение.4.
request.user
это не словарь, этоUser
экземпляр, «странность» заключается в том, что вы сравнивалиUser
экземпляр со строкой (на самом деле вы сравнивали идентификаторыUser
экземпляра и строки)