1

サインアップ時に、ユーザーに次のことを要求したいと思います。

  • フルネーム(姓名で保存したいけど)
  • 会社名
  • Eメール
  • パスワード

StackOverflow で同様の状況を何十回も読みました。models.py では、次のように User モデルを拡張します。

# models.py
class UserProfile(models.Model):
  company = models.CharField(max_length = 50)
  user = models.OneToOneField(User)

def create_user_profile(sender, instance, created, **kwargs):
  if created:
    profile, created = UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_user_profile, sender=User)

出典: Django でカスタム フィールドを使用してユーザー モデルを拡張する

私も追加しました:

# models.py

class SignupForm(UserCreationForm):
  fullname = forms.CharField(label = "Full name")
  company = forms.CharField(max_length = 50)
  email = forms.EmailField(label = "Email")
  password = forms.CharField(widget = forms.PasswordInput)

class Meta:
  model = User
  fields = ("fullname", "company", "email", "password")

def save(self, commit=True):
  user = super(SignupForm, self).save(commit=False)
  first_name, last_name = self.cleaned_data["fullname"].split()
  user.first_name = first_name
  user.last_name = last_name
  user.email = self.cleaned_data["email"]
  if commit:
    user.save()
  return user

そしてviews.pyで:

# views.py

@csrf_exempt
def signup(request):
  if request.method == 'POST':
    form = SignupForm(request.POST)
    if form.is_valid():
      new_user = form.save()
      first_name, last_name = request.POST['fullname'].split()
      email = request.POST['email']
      company = request.POST['company'],
      new_user = authenticate(
        username = email,
        password = request.POST['password']
      )
      # Log the user in automatically.
      login(request, new_user)

現在、会社名は保存されていません。それ、どうやったら出来るの?

4

1 に答える 1