Задать вопрос
@sinitsa11

Как реализовать Update для AbstractUser в Django?

В моем приложении реализованы регистрация/вход с помощью наследования UserCreationForm. Как осуществить изменение пользователя, задействовав UserChangeForm?

#models.py
from django.contrib.auth.models import AbstractUser


# Create your models here.
class CustomUser(AbstractUser):
    pass

    def __str__(self):
        return self.username


#forms.py
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser


class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm):
        model = CustomUser
        fields = ('first_name', 'last_name', 'username', 'email')


class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = CustomUser
        fields = ('first_name', 'last_name', 'username', 'email')


#views.py
from django.shortcuts import render, redirect

# Create your views here.
from django.urls import reverse_lazy
from django.views.generic.edit import CreateView
from django.views import View

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser


class SingUpView(CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

# выдает ошибку
class CustomUserUpdateView(View):
    def get(self, request, *args, **kwargs):
        user_id = kwargs.get("id")
        user = CustomUser.objects.get(id=user_id)
        form = CustomUserChangeForm(instance=user)
        return render(
            request, "users/update.html", {"form": form, "user_id": user_id}
        )

    def post(self, request, *args, **kwargs):
        user_id = kwargs.get("id")
        user = CustomUser.objects.get(id=user_id)
        form = CustomUserChangeForm(request.POST, instance=user)
        if form.is_valid():
            form.save()
            return redirect("users_list")
        return render(
            request, "users/update.html", {"form": form, "user_id": user_id}
        )


#update.html
{% if form.errors %}
    <div>
        <ul>
        {% for error in form.errors %}
            <li><strong>{{ error|escape }}</strong></li>
        {% endfor %}
        </ul>
    </div>
{% endif %}

<form action="{% url 'users_update' id=user_id %}" method="post">
    {% csrf_token %}
    <table border="1">
    {{ form }}
    </table>
    <input type="submit" value="Сохранить">
</form>


Пыталась реализовать update через наследование класса View с методами get/post, выдает ошибку: CustomUser matching query does not exist.
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы