質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1816閲覧

「Django」プロフィール編集画面における、usernameのバリデーションエラー。

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/11/22 09:33

編集2021/11/25 18:49

前提・実現したいこと

現在Django-allauthを利用して、ユーザー自身でプロフィールを編集できる画面を作成しています。
編集したい項目は、{ユーザー名、姓、名、住所、電話番号}です。
(ユーザー名のみunique=Trueです。)

下記コードの場合、編集フォーム画面は正常に表示されます。

しかし、ユーザー名を変更せずにその他の項目を変更すると「同じユーザー名が既に登録済みです。」と表示され、プロフィールを更新できません。
(ユーザー名を変更した場合は、正常に上書き保存されます。)

ユーザー名を変更しない場合でも、正常に動作するようにするにはどこを直せば良いのでしょうか?

どうか力を貸してください。。

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

forms

1class ProfileForm(forms.ModelForm): 2 class Meta: 3 model = CustomUser 4 fields = ('username', 'first_name', 'last_name', 'address', 'tel') 5 labels = { 6 'username': 'ユーザー名', 'first_name': '名', 'last_name': '性', 'address': '住所', 'tel': '電話番号' 7 } 8 9 def __init__(self, username, first_name=None, last_name=None, address=None, tel=None, *args, **kwargs): 10 kwargs.setdefault('label_suffix', '') 11 super().__init__(*args, **kwargs) 12 if username: 13 self.fields['username'].widget.attrs['value'] = username 14 if first_name: 15 self.fields['first_name'].widget.attrs['value'] = first_name 16 if last_name: 17 self.fields['last_name'].widget.attrs['value'] = last_name 18 if address: 19 self.fields['address'].widget.attrs['value'] = address 20 if tel: 21 self.fields['tel'].widget.attrs['value'] = tel 22 23 def update(self, user): 24 user.username = self.cleaned_data['username'] 25 user.first_name = self.cleaned_data['first_name'] 26 user.last_name = self.cleaned_data['last_name'] 27 user.address = self.cleaned_data['address'] 28 user.tel = self.cleaned_data['tel'] 29 user.save()

views

1class EditView(LoginRequiredMixin, FormView): 2 template_name = "accounts/profile_edit.html" 3 form_class = ProfileForm 4 success_url = reverse_lazy('accounts:profile') 5 6 def form_valid(self, form): 7 form.update(user=self.request.user) 8 return super().form_valid(form) 9 10 def get_form_kwargs(self): 11 kwargs = super().get_form_kwargs() 12 kwargs.update({ 13 'username': self.request.user.username, 14 'first_name': self.request.user.first_name, 15 'last_name': self.request.user.last_name, 16 'address': self.request.user.address, 17 'tel': self.request.user.tel, 18 }) 19 return kwargs

プロフィール編集フォームで、変更していない(初期値のままの)ユーザー名だとバリデーションエラーになってしまいます。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問