2

にフィールドを追加するカスタム プロファイルを作成しようとしていますdjango-registration。ここに私がこれまでに持っているコードがあります -

models.py

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.ForeignKey(User, unique=True)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.CharField(max_length=50)
    password = models.CharField(max_length=50) 

そしてsettings.py

AUTH_PROFILE_MODULE = 'myproject.Profile'

ただし、create_user() を使用しようとすると、次のエラーが発生します。インタープリターに入力すると、次のようになります-

>>> from django.contrib.auth.models import User
>>> User.objects.create_user(first_name='tom',last_name='smith',email='ts@gmail.com',password='hello')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: create_user() got an unexpected keyword argument 'first_name'

create_user()これらの新しい列を認識するために何が欠けていますか? ありがとうございました。

4

2 に答える 2

10

ここであなたが間違っていることはたくさんあります

まず、これらはユーザーモデルのフィールドではなく、プロファイルモデルのフィールドです。したがって、Usermanagerメソッドがそれらを認識しないことは驚くべきことではありません。create_userを使用して通常の方法でUserオブジェクトを定義してから、そのユーザーを使用してProfileインスタンスを定義する必要があります。

次に、create_userすべてのフィールド名をキーワード引数として使用するのではなく、ユーザー名、電子メール、およびパスワードのみを使用します。繰り返しますが、後で他のフィールドを自分で設定する必要があります。

ただし、なぜこれらの特定のフィールドを定義したのか、まったくわかりません。これらはすべて、組み込みのユーザーモデルで使用できます。特に、パスワードをプレーンテキストではなくハッシュとして保存するコードも記述しない限り、独自のパスワードフィールドを定義することは絶対に避けてください。

于 2011-05-15T09:36:38.280 に答える
1
username, first_name, last_name, email, password = kwargs['username'], kwargs['first_name'], kwargs['last_name'], kwargs['email'], kwargs['password1']
        user = User(username=username, email=email, first_name=first_name, last_name=last_name)
        user.set_password(password)
        user.save()

それが解決策です

于 2012-12-25T21:17:20.893 に答える