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}

Вы можете получить доступ к значениям контекста только из шаблонов. Поэтому передавайте те, которые вы хотите использовать при возврате ответа.

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