작성
·
1.3K
답변 3
1
저도 같은 문제로 찾아봤어요(+chatgpt활용)
views.py
# (3)수정뷰
class AccountUpdateView(UpdateView):
#해당 CBV를 통해 활용할 모델객체 파라미터
model = User #User 로 모델 지정
#기존 django 제공 UserCreationForm을 리팩토리한 forms.py에서 정의한 AccountUpdatedForm 활용
form_class = AccountUpdateForm
#해당 CBV를 통해 반환활 페이지
success_url = reverse_lazy("accountapp:hello_world")
# 해당 CBV를 통해 볼 페이지
template_name = "accountapp/update.html"
def get_success_url(self):
return reverse("accountapp:detail", kwargs={'pk': self.object.pk})
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
# UserCreationForm 상속 및 재활용
class AccountUpdateForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'password1', 'password2']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# UserCreationForm 필드 중 username 필드는 수정 못 하도록 잠금
self.fields["username"].disabled = True
def clean_username(self):
# 현재 사용자명은 이미 존재하는 것으로 간주
return self.instance.username
해결이용!
1
장고 기능이 바뀐 건지 저도 같은 에러 뜨는데 그냥 비밀번호 변경하는 PasswordChangeView import 해서 사용해도 될 것 같아요
accountapp/views.py
from django.contrib.auth.views import PasswordChangeView
class AccountUpdateView(PasswordChangeView):
model = User
template_name = "accountapp/update.html"
success_url = reverse_lazy("accountapp:hello_world") #-- 성공한 경우 되돌아갈 페이지 지정 함수형 view -> reverse
accountapp/urls.py
from django.urls import path, reverse_lazy
from .views import hello_world
from .views import AccountCreateView, AccountDetailView, AccountUpdateView
from django.contrib.auth.views import LoginView, LogoutView
app_name = "accountapp"
urlpatterns = [
path('hello_world/', hello_world, name = "hello_world"),
path('login/', LoginView.as_view(template_name = "accountapp/login.html"), name = "login"),
path('logout/', LogoutView.as_view(), name = "logout"),
path('detail/<int:pk>', AccountDetailView.as_view(), name = "detail"),
path('update/<int:pk>', AccountUpdateView.as_view(),name = "update"),
#-- 몇 번 유저한테 접근할지 primary key 필요
path('create/', AccountCreateView.as_view(), name = "create"),
]
-3
안녕하세요, 인프런 AI 인턴이에요.
A user with that username already exists. 에러는 이미 존재하는 사용자 이름으로 새로운 사용자를 생성하려고 할 때 발생하는 에러입니다. 이 경우 신규 사용자 이름을 변경하거나, 이미 존재하는 사용자 이름을 가진 사용자의 정보를 업데이트 해야 합니다.
하지만 이 경우 비밀번호를 입력하고 제출하면 계속해서 오류 메시지가 발생한다는 것으로 보아, 신규 사용자를 생성하는 것이 아니라 이미 존재하는 사용자를 업데이트하면서 발생한 문제일 가능성이 높아 보입니다. 이 문제를 해결하기 위해서는 사용자 이름과 비밀번호를 모두 확인해야 합니다.
가능한 해결 방법으로는, 이미 존재하는 사용자의 정보를 확인하고, 해당 사용자의 비밀번호를 변경하거나, 사용자 이름을 수정하여 새로운 사용자를 생성하는 방법이 있습니다. 또한, 데이터베이스에 중복된 사용자 정보가 있는 경우에도 이러한 문제가 발생할 수 있으므로, 데이터베이스를 확인해 보시는 것도 좋은 방법입니다.
해당 문제를 해결하기 위해서는 조금 더 자세한 정보가 필요합니다. 현재 사용하시는 언어, 프레임워크, 데이터베이스 등을 알려주시면 더욱 정확한 답변을 드릴 수 있을 것 같습니다. 감사합니다.
저도 질문 주신 분과 같은 에러를 맞았습니다. python django를 활용하고 있고 sqlite를 사용하고 있습니다.
url은 다음과 같이 설정되어 있습니다.
아래와 같이 forms.py를 설정하고
update.view의 form_class에 아래와 같이 적용하였습니다.
update.html은 이렇게 구성되어 있습니다.
detail.html은 이렇게 구성되어 있습니다.
그 후 runserver를 실행하면 username부분은 disabled처리가 되어있고
password와 password confirm을 입력하고 제출하게 되면 A user with that username already exists 에러가 나타납니다. 해결방법을 알려주시면 감사하겠습니다.