Как создать функцию обновления для Django AbstractUserPython

Программы на Python
Anonymous
Как создать функцию обновления для Django AbstractUser

Сообщение Anonymous »

Я создал регистрацию/вход с помощью UserCreationForm. Как сделать обновление возможным с помощью UserChangeForm?
users/models.py

Код: Выделить всё

from django.contrib.auth.models
import AbstractUser

# Create your models here.
class CustomUser(AbstractUser): pass
def __str__(self): return self.username
users/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')
users/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}
)
Я пытался создать обновление с наследованием класса View, включая методы get/post, но выдает ошибку.

Код: Выделить всё

CustomUser matching query does not exist.
users/urls.py

Код: Выделить всё

from django.urls import path

from . import views

urlpatterns = [
path('', views.IndexView.as_view(), name='users_list'),
path('signup/', views.SingUpView.as_view(), name='signup'),
path('/update/', views.CustomUserUpdateView.as_view(), name='users_update'),
]
urls.py

Код: Выделить всё

from django.contrib import admin
from django.urls import path, include
from . import views

urlpatterns = [
path("", views.index, name='home'),
path("users/", include("task_manager.user.urls")),
path('users/', include('django.contrib.auth.urls')),
path('admin/', admin.site.urls),
]
Я сделал все, что сказал мне Google, чтобы активировать get/post (я проверил пользователя в настройках, попытался добавить try/Exception и использовать get_user_model), но ничего из этого не помогло.

Подробнее здесь: https://stackoverflow.com/questions/797 ... stractuser

Вернуться в «Python»