Django Admin не предназначен для этой цели
Django Admin следует использовать только тогда, когда пользователь имеет полный доступ ко всему в базе данных. То, что они могут редактировать, может быть ограничено, но в целом то, что они могут видеть, не должно быть.
Он не предназначен для того, чтобы разрешать многое с точки зрения предоставления доступа только к определенным битам данных. Для этой цели рекомендуется создать пользовательский веб-интерфейс, в котором легко сделать такие ограничения.
Такое ограничение легко в views
и templates
. Используйте request.user
.
Я сейчас на моем телефоне, но если вы хотите, я могу опубликовать пример кода, который делает это. Просто прокомментируйте ниже.
Это образцы из updateprofile
метода, который у меня есть.
Основная идея здесь заключается в том, что единственными данными, отправляемыми в форму, являются данные пользователя учетной записи, которая в данный момент вошла в систему. Вы хотели бы реализовать такую функцию.
views.py проверка правильности пользователя
@login_required(login_url='/login')
def update_profile(request):
if request.method == 'POST':
user_form = UserForm(request.POST, instance=request.user)
if user_form.is_valid():
user_form.save()
return redirect('/accounts/{}'.format(request.user.username), request.user.username)
else:
print("Something broke")
else:
user_form = UserForm(instance=request.user) #grabbing the data from that specific user, making sure that is all that is passed.
return render(request, 'profile_update.html', {
'user_form': user_form,
})
В шаблоне оператор if проверяет, является ли пользователь страницы владельцем зарегистрированной учетной записи (и проверяет, что онипопадают в их учетную запись) и, если да, показывает им информацию.
шаблон кода для проверки правильности пользователя
{% if page_username == user.username and user.is_authenticated %}
<p>Whatever content you wanted to show to the user who owned the page and was logged in.</p>
{% else %}
<p>Whatever you want to say to users who are not authorized to view the data on the page, if anything.</p>
{% endif %}