TypeError at /profile/edit_profile/ profile_edit() missing 1 required positional argument: 'username'

Рейтинг: 0Ответов: 1Опубликовано: 22.08.2023

Пишу социальную сеть. При попытке отредактировать профиль выходит ошибка выше. Кто-то может, пожалуйста, объяснить что не так с моим кодом?

@login_required
def profile_edit(request, username):
    username = get_object_or_404(User, author=username)
    if request.username != post.author:
        return redirect('blog:post_detail', username)
    form = PostForm(
        request.POST or None,
        files=request.FILES or None,
        instance=post)
    if form.is_valid():
        form.save()
        return redirect('blog:post_detail', author=username)
    template = 'blog/create.html'
    context = {'form': form, 'post': post}
    return render(request, template, context)

Ответы

▲ 0Принят

Итак, начнем с того, что ошибка "TypeError: profile_edit() missing 1 required positional argument: 'username'" означает, что функция profile_edit() требует передачи аргумента username, но ты вызываешь функцию без этого аргумента.

Предположу, что тебе нужно передать username в URL-шаблоне. Убедись, что у тебя есть правильно настроенный URL-шаблон для представления profile_edit(), который включает username в качестве аргумента.

Например, твой URL-шаблон может выглядеть как-то так:

from django.urls import path

from . import views

app_name = 'blog'

urlpatterns = [
    # ...
    path('profile/edit/<str:username>/', views.profile_edit, name='profile_edit'),
    # ...
]

Получившийся URL-шаблон будет передавать значение username в качестве аргумента функции profile_edit()

Измени свой код функции profile_edit() следующим образом:

@login_required
def profile_edit(request, username):
    user = get_object_or_404(User, username=username)
    # ...

Затем обнови шаблон с формой редактирования профиля, чтобы в URL-шаблоне использовать аргумент username.

Например:

<form action="{% url 'blog:profile_edit' username=request.user.username %}" method="POST">
    <!-- ... -->
</form>