Django ограничивает пользователей от обновления/удаления постов других пользователей
views.py
@login_required(login_url='/login')
def updatepost(request,pk):
post = Post.objects.get(id=pk)
form = PostForm(instance=post)
if request.method =='POST':
form = PostForm(request.POST, request.FILES, instance=post)
if form.is_valid():
form.save()
return redirect ('mainpage')
context = {'form':form}
return render( request, 'postform.html', context )
postform.html
{% include 'main.html'%}
{% block content %}
{%if user.is_authenticated%}
{% if user.id == post.user.id%}
<div>
<form method="POST" action ="">
{% csrf_token %}
{{form.as_p}}
<input type="Submit" value ="Submit"/>
</form>
</div>
{%endif%}
{%endif%}
{% endblock content %}
Я пытаюсь ограничить пользователя, который вошел в систему - от обновления, удаления сообщений других пользователей. Однако когда я пытаюсь использовать {% if user.id == post.user.id%} , страница становится пустой даже для пользователя, который редактирует свое собственное сообщение. То же самое происходит и с удалением. Это работает на главной странице, где отображаются посты (скрывает кнопки редактирования и удаления). В чем причина того, что пост не отображается внутри шаблона?
Я не понимаю, что даже {{post.user}} в postform.html не появляется, ни на deleteform и т.д. - почему эти данные объектов поста не передаются в postform.html ?
Вам следует изменить контекст для доступа к экземпляру поста из вашего шаблона.
context = {'form': form, 'post': post}
Вы можете получить доступ к значениям контекста только из шаблонов. Поэтому передавайте те, которые вы хотите использовать при возврате ответа.