Почему авторизованный пользователь не видит ссылку на редактирование поста?

Друзья, после успешной авторизации не удается сделать ссылку на редактирование поста.

Что не так делаю?

В шаблоне ввожу ссылку на редактирование поста, и вместо первого значения "Редактировать", выдает второе - "Войдите, чтобы отредактировать".

{% if request.user == post.user %}<a href="{% url 'edit_post' post_slug=post.slug %}" class="post_user_edit">Редактировать</a>
{% else %}
<a href="{% url 'user:login' %}" class="post_user_edit">Войдите, чтобы отредактировать</a>
{% endif %}

Хотя показывает, что пользователь авторизован:

{% if user.is_authenticated %}
<a class="menu-item" href="{% url 'user:logout' %}">Выйти</a>
{% else %}
<a href="{% url 'user:login' %}">Войти</a>

Приложение publication:

views.py:

from django.shortcuts import render, get_object_or_404, redirect
from django.http import HttpResponse, HttpResponseNotFound, Http404
from publication.models import Userpublication
from django.urls import reverse
from .forms import PostEditForm
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.views import LoginView
from django.contrib.auth.decorators import login_required

def indexs(request):
    posted = Userpublication.published.filter(is_published=1)
    return render(request, 'publication/post.html', {'post_lists': posted})


def show_post(request, post_slug,  *args, **kwargs):
    post = get_object_or_404(Userpublication, slug=post_slug)

    data = {
    'user': post.user,
    'content': post.content,
    'post': post,
    }

    return render(request, 'publication/post_user.html', data)


@login_required
def edit_post(request, post_slug):
    post = get_object_or_404(Userpublication, slug=post_slug)
    
    # Проверяем, является ли текущий пользователь авторизованным
    if not request.user.is_authenticated:
        return HttpResponseForbidden("Для редактирования поста требуется авторизация.")
    
    # Проверяем, является ли текущий пользователь автором поста
    if post.user != request.user:
        return HttpResponseForbidden("У вас нет разрешения на редактирование этого поста.")
        
    if request.method == 'POST':
        form = PostEditForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            return redirect(post)  # Перенаправляем на страницу просмотра поста
    else:
        form = PostEditForm(instance=post)
    return render(request, 'user/test.html', {'form': form})

urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('post/', views.indexs, name='posert'),
    path('posts/<slug:post_slug>/', views.show_post, name='poserts'),
    
]

models.py:

from django.db import models
from django.urls import reverse


class PublishedManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(is_published=1).order_by('-time_create')


class Userpublication(models.Model):
    user = models.CharField('Пользователь', max_length=255)
    slug = models.SlugField(max_length=255, unique=True, db_index=True)
    content = models.TextField('Контент', blank=True)
    time_create = models.DateTimeField('Время создания', auto_now_add=True)
    time_update = models.DateTimeField('Время обновления', auto_now=True)
    is_published = models.BooleanField('Опубликовано ли', default=True)

    objects = models.Manager()
    published = PublishedManager()


    def __str__(self):
        return self.user

    class Meta:
        ordering = ['-time_create']
        indexes = [
            models.Index(fields=['-time_create'])
        ]

    class Meta:
        verbose_name = 'Публикация'
        verbose_name_plural = 'Публикации'


    def get_absolute_url(self):
        return reverse('poserts', kwargs={'post_slug': self.slug})

forms.py:

from django import forms
from .models import Userpublication

class PostEditForm(forms.ModelForm):
    class Meta:
        model = Userpublication
        fields = ['content']

Приложение user:

views.py:

from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
from django.shortcuts import render
from django.urls import reverse, reverse_lazy
from django.views.generic import CreateView
from .forms import LoginUserForm, RegisterUserForm
from django.contrib.auth.views import LoginView
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.decorators import login_required



class LoginUser(LoginView):
    form_class = LoginUserForm
    template_name = 'user/login.html'
    extra_context = {'title': 'авторизация'}

    def get_success_url(self):
        return reverse_lazy('home')

        #dispatch отвечает за предотвращение повторной авторизации 
    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated:
            return HttpResponseRedirect(self.get_success_url())
        return super().dispatch(request, *args, **kwargs) 

def logout_user(request):
    logout(request)
    return HttpResponseRedirect(reverse('user:login'))


class RegisterUser(CreateView):
    form_class = RegisterUserForm
    template_name = 'user/reg.html'
    extra_context = {'title': "Регистрация"}
    success_url = reverse_lazy('user:login')

urls.py:

from django.urls import path
from . import views

app_name = 'user'

urlpatterns = [
    path('', views.LoginUser.as_view(), name='login'),
    path('logout/', views.logout_user, name='logout'),
    path('reg/', views.RegisterUser.as_view(), name='reg'),
]

forms.py:

from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm

class LoginUserForm(AuthenticationForm):
    username = forms.CharField(label='',#логин 
        widget=forms.TextInput(attrs={'class': 'input_field', 'placeholder': 'Ваш логин'}))
    password = forms.CharField(label='',#пароль 
        widget=forms.PasswordInput(attrs={'class': 'input_field', 'placeholder': 'Ваш пароль'}))
    class Meta:
        model = get_user_model()
        fields = ['username', 'password']
        labels = {
        'username': '222',
        'password': '222'
        }
        widgets = {
        'username': forms.TextInput(attrs={'class': 'input_field', 'placeholder': 'Логин'}),
        'password': forms.TextInput(attrs={'class': 'input_field', 'placeholder': 'Пароль'}),   
        }


class RegisterUserForm(UserCreationForm):
    username = forms.CharField(label='', 
        widget=forms.TextInput(attrs={'class': 'input_field', 'placeholder': 'Ваш логин'}))
    password1 = forms.CharField(label='', 
        widget=forms.PasswordInput(attrs={'class': 'input_field', 'placeholder': 'Ваш пароль'}))
    password2 = forms.CharField(label='', 
        widget=forms.PasswordInput(attrs={'class': 'input_field', 'placeholder': 'Подтвердите пароль'}))

    class Meta:
        model = get_user_model()
        fields = ['username', 'email', 'first_name', 'last_name', 
        'password1', 'password2']
        labels = {
        'email': '',
        'first_name': '',
        'last_name': ''
        }
        widgets = {
        'email': forms.TextInput(attrs={'class': 'input_field', 'placeholder': 'E-mail'}),
        'first_name': forms.TextInput(attrs={'class': 'input_field', 'placeholder': 'Имя'}),
        'last_name': forms.TextInput(attrs={'class': 'input_field', 'placeholder': 'Фамилия'}),     
        }


    def clean_email(self):
        email = self.cleaned_data['email']
        if get_user_model().objects.filter(email=email).exists():
            raise forms.ValidationError("Такой E-mail уже существует!")
        return email

Используйте для поля автора публикации внешний ключ к User из django.contrib.auth, а не CharField

from django.contrib.auth.models import User

class Publication(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
Вернуться на верх