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

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

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

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1592閲覧

djangoのカスタムフィールドに紐付けたprofileモデルについて教えて下さい。

nre

総合スコア35

Django

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/09/05 06:22

私はカスタムユーザーモデルにOneToOneFieldでプロファイルモデルを紐付けて、会員登録後に編集出来るユーザー情報ページにカスタムユーザーモデルで作ってフィールドとプロファイルモデルで作ったフィールドを表示させ、情報を保存出来る様にしたいです。

現在はプロファイルモデルの紐付けは完了しており、2つのフィールドをユーザー情報ページに表示させる所で躓いております。
ユーザー情報ページは会員登録した人のみが編集出来るページとなっております。

また、カスタムユーザーモデルに独自のフィールドを追加する事はダメなのでしょうか?
例えば
class User(AbstractBaseUser, PermissionsMixin):
file = ImageFiled()

python

1'''models.py''' 2 3class Profile(models.Model): 4 name = models.CharField(("ハンドルネーム"), max_length=255) 5 phone = models.CharField("電話番号", max_length=255, blank=True) 6 gender = models.CharField("性別", max_length=2, choices=GENDER_CHOICES, blank=True) 7 user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 8 9 10 def __str__(self): 11 return self.name 12 13 14class UserManager(BaseUserManager): 15 """ユーザーマネージャー(省略).""" 16 17 18class User(AbstractBaseUser, PermissionsMixin): 19 """カスタムユーザーモデル.""" 20 21 email = models.EmailField(_('email address'), unique=True) 22 first_name = models.CharField(_('first name'), max_length=30, blank=True) 23 last_name = models.CharField(_('last name'), max_length=150, blank=True) 24  '''以下省略'''

python

1'''views.py''' 2class UserUpdate(OnlyYouMixin, generic.UpdateView): 3 model = User 4 form_class = UserUpdateForm 5 template_name = 'register/user_form.html' 6 7 def get_success_url(self): 8 return resolve_url('register:user_detail', pk=self.kwargs['pk']) 9

python

1'''forms.py''' 2 3class ProfileForm(forms.ModelForm): 4 class Meta: 5 model = Profile 6 fields = ( 7 "name", "gender", "phone" 8 ) 9 10class UserUpdateForm(forms.ModelForm): 11 """ユーザー情報更新フォーム""" 12 13 class Meta: 14 model = User 15 fields = ('last_name', 'first_name',) 16 17 def __init__(self, *args, **kwargs): 18 super().__init__(*args, **kwargs) 19 for field in self.fields.values(): 20 field.widget.attrs['class'] = 'form-control'

html

1<---ユーザー情報更新ページ---!> 2<---user_form.html---!> 3 4<form action="" method="POST"> 5 {{ form.non_field_errors }} 6 <table class="table"> 7 <tbody> 8 {% for field in form %} 9 <tr> 10 <th><label for="{{ field.id_for_label }}">{{ field.label }}</label></th> 11 <td>{{ field }} {{ field.errors }}</td> 12 </tr> 13 {% endfor %} 14 </tbody> 15 </table> 16 {% csrf_token %} 17 <button type="submit" class="btn btn-success btn-lg" >送信</button> 18</form>

調べた事・試した事

2つのフィールドを汎用クラスビューで一度に表示出来る方法を色々試してみました。
ユーザー情報更新ページに2つのフィールドを表示させる事に成功したのですが、入力した情報を送信してもモデルに情報が保存されるませんでした。そのコードが下記になります。

python

1'''views.py''' 2 3class UserUpdate(OnlyYouMixin, generic.UpdateView): 4 model = User 5 fields = () 6 template_name = 'register/user_form.html' 7 8 def get_success_url(self): 9 return resolve_url('register:user_detail', pk=self.kwargs['pk']) 10 11 def get_context_data(self, **kwargs): 12 # スーパークラスのget_context_dataを使うとobject_listに 13 # 表示中のモデルの情報が入るのでそれを利用 14 context = super().get_context_data(**kwargs) 15 # contextは辞書型 16 context.update({ 17 'qustion_text_form': ProfileForm(**self.get_form_kwargs()), 18 'choice_text_form': UserUpdateForm(**self.get_form_kwargs()), 19 }) 20 return context

html

1<---ユーザー情報更新ページ---!> 2<---user_form.html---!> 3 4{{ choice_text_form.as_p }} 5{{ qustion_text_form.as_p }} 6<---上記コードをformタグの中に挿入しました。---!>

こちらで以上となります。ご回答の程何卒よろしくお願い申し上げます。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問