実現したいこと
プロフィール編集ページを作成しているのですが、テスト環境から編集ページを開こうとしたところマネージャーは利用できません。'auth.User' は 'accounts.CustomUser' に置き換えられましたと表示されたのですが、どこの不備か分かりません。
発生している問題・エラーメッセージ
Manager isn't available; 'auth.User' has been swapped for 'accounts.CustomUser'
該当のソースコード
追記
accounts/models.py
1from django.db import models 2from django.contrib.auth.models import AbstractUser 3 4# Create your models here. 5class CustomUser(AbstractUser): 6 """拡張ユーザーモデル""" 7 class Meta(AbstractUser.Meta): 8 db_table = 'custom_user' 9 image = models.ImageField('プロフィール画像', upload_to='images',blank=False, null=True) 10 self_introduction = models.CharField('自己紹介', blank=False, null=True, default=0, max_length=1000)
accounts/views.py
1from django.shortcuts import render, redirect 2from django.views.generic import View 3from django.contrib.auth.models import User 4from django.contrib import messages 5from django.contrib.auth.mixins import LoginRequiredMixin 6from .forms import CustomUpdateForm 7from django.http import HttpResponseRedirect 8from django.views import View 9 10class ProfileView(LoginRequiredMixin, View): 11 template_name = 'accounts/profile.html' 12 def get_queryset(self, request, *args, **kwargs): 13 return render(request, 'accounts/profile.html') 14 15 16class ProfileEditView(LoginRequiredMixin, View): 17 template_name = 'accounts/profile_edit.html' 18 def get(self, request, *args, **kwargs): 19 user_data = User.objects.get(id=request.user.id) 20 form = CustomUpdateForm( 21 request.POST or None, 22 initial={ 23 'username': user_data.username, 24 'channel_name': user_data.channel_name, 25 'self_introduction': user_data.self_introduction, 26 'image': user_data.image 27 } 28 ) 29 30 return render(request, 'accounts/profile_edit.html', { 31 'form': form, 32 'user_data': user_data 33 }) 34 35 def post(self, request, *args, **kwargs): 36 form = CustomUpdateForm(request.POST or None) 37 if form.is_valid(): 38 user_data = User.objects.get(id=request.user.id) 39 user_data.username = form.cleaned_data['username'] 40 user_data.channel_name = form.cleaned_data['channel_name'] 41 user_data.self_introduction = form.cleaned_data['self_introduction'] 42 if request.FILES.get('image'): 43 user_data.image = request.FILES.get('image') 44 user_data.save() 45 return redirect('profile') 46 47 return render(request, 'accounts/profile.html', { 48 'form': form 49 }) 50
accounts/forms.py
1from allauth.account.forms import SignupForm 2from django import forms 3from .models import CustomUser 4from allauth.account.adapter import DefaultAccountAdapter 5 6class CustomSignupForm(SignupForm): 7 channel_name = forms.CharField(label='チャンネル名') 8 9 class Meta: 10 model = CustomUser 11 12 def signup(self, request,user): 13 user.channel_name = self.cleaned_data['channel_name'] 14 user.save() 15 return user 16 17class CustomUpdateForm(forms.Form): 18 username = forms.CharField(max_length=150, label='ユーザー名') 19 channel_name = forms.CharField(max_length=1000, label='チャンネル名') 20 self_introduction = forms.CharField(label='自己紹介', widget=forms.Textarea(), required=False) 21 image = forms.ImageField(required=False, ) 22 23 class Meta: 24 model = CustomUser 25 26 def update(self, request,user): 27 user.username = self.cleaned_data['username'] 28 user.channel_name = self.cleaned_data['channel_name'] 29 user.self_introduction = self.cleaned_data['self_introduction'] 30 user.image = self.cleaned_data['image'] 31 user.save() 32 return user
accounts/urls.py
1from django.urls import path 2from accounts import views 3 4urlpatterns = [ 5 path('profile/', views.ProfileView.as_view(), name='profile'), 6 path('profile_edit/', views.ProfileEditView.as_view(), name='profile_edit'), 7]
project/urls.py
1from django.contrib import admin 2from django.urls import path,include 3 4urlpatterns = [ 5 path('admin/', admin.site.urls), 6 # 追記 7 path('',include('app.urls')), 8 path('accounts/', include('allauth.urls')), 9 path('accounts/', include('accounts.urls')), 10]
project/settings.py
1#ユーザー認証機能 2AUTH_USER_MODEL = 'accounts.CustomUser' 3ACCOUNT_ADAPTER = 'accounts.adapter.AccountAdapter' 4ACCOUNT_FORMS = { 5 'signup' : 'accounts.forms.CustomSignupForm', 6} 7AUTHENTICATION_BACKENDS = [ 8 # Needed to login by username in Django admin, regardless of `allauth` 9 'django.contrib.auth.backends.ModelBackend', 10 11 # `allauth` specific authentication methods, such as login by e-mail 12 'allauth.account.auth_backends.AuthenticationBackend', 13]
試したこと
調べるとsettings.pyのAUTH_USER_MODELに関する記述を変更している例を見たのですが、accounts.CustomUserでしっかりと作動し、auth.Userでエラーが発生したので、accounts.CustomUserで大丈夫そうでした。
補足情報(FW/ツールのバージョンなど)
Python: 3
Django: 4
回答1件
あなたの回答
tips
プレビュー