Python3.6 Django2.1で開発を行っております。
デフォルトのUserモデルに、追加情報を管理するモデルを作成しました。
class Userprofile(models.Model): owner = models.OneToOneField(User, on_delete=models.CASCADE) birthday = models.DateField() telephone
これに、CreateViewクラスで同時に登録したいのですが、うまいやりかたが思いつきません。
class UserCreateForm(UserCreationForm): class Meta: model = User
このようにUserCreationFormクラスを使うのが良いと思うのですが、モデルとして登録できるのが1つ(?)(User)なので、
以下のように、UserProfileモデル用のフォームは別途以下のようにしてテンプレートに引き渡しています。
class UserCreate(generic.CreateView): form_class = UserCreateForm def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['form2'] = UserprofileForm()
この場合 form_valid()関数をオーバーライドするだけでは、UserProfileFormの方は受け取れない(?)
ので、Post()関数をオーバーライドすることにしました。
しかし、form_valid()の場合に比べてValidationが甘い(パスワードの文字数などをチェックしてくれない→実装しないといけない?)など面倒でした。
ゴリゴリやればできるかもしれませんが、今後のためにもスマートなやり方をご教授いただきたいと思います。
いくつか考えた中では、
- オリジナルのユーザーモデルを使用する
- OneToOneでリンクするのではなく、Userモデルを継承したモデルを作成する
- ModelFormではなく、通常のFormクラスで両モデルのフィールドを含んだformを作成する
- 現在の方針でPost()関数を強化する
- もっと簡単な方法がある???
3)が早いと思ったのですが、UserCreationFormクラスを引き継いでいないので、
ユーザー名の重複チェックやパスワードの安全性チェック等を自分でやる必要が出てくるのかと思っています。
方向性だけでも教えていただけると助かります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。