0

私のプロジェクト (Django 1.5) では、認証を処理するアカウントと呼ばれるアプリと、すべてのプロファイル操作を処理するプロファイルと呼ばれるアプリの 2 つのアプリをセットアップしました。次の設定で、アカウント アプリのカスタム ユーザー モデルを作成しました。

class CustomUser(AbstractBaseUser):
    email = models.CharField()
    username = models.CharField
    is_staff...

プロファイル アプリの場合:

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    city = models.CharField()
    state = models....

ユーザーの作成時にプロファイルをインスタンス化したくないので、このように設定しました。最初のサインイン時に作成したい。

UserProfile の作成に役立つ modelForm を作成しようとしています。これをOneToOneFieldに保存するために、現在サインインしているユーザーを取得する方法について少し混乱しています。フォームの init メソッドと関係があることは知っていますが、ドキュメントを調べたところ、明確な解決策がわかりません。助けてください!!だから私は次のようなフォームを作成しました:

class BasicProfile(forms.ModelForm):
    class Meta:
        model = UserProfile
        exclude = ['foo']

私の質問: フォームにユーザーを入力するにはどうすればよいですか? 私はただ使用しますか:

self.user = request.user 
4

2 に答える 2

0

それを考え出した.. @ジェイ - コースに私を設定してくれてありがとう.

フォーム.py:

class FormaholicsAnon(forms.Form):
    name = forms.Char...  
    ...

    def __init__(self, *args, **kwargs):

        self.user = kwargs.pop('user', None)
        super(FormaholicsAnon, self).__init__(*args, **kwargs)

ビュー.py:

# Make sure the current user is not anonymous
if request.user.is_authenticated():
    form = FormaholicsAnon(request.POST, user=request.user)
于 2013-11-07T16:42:55.393 に答える
0

AuthenticationMiddlewareを有効にしている場合、リクエスト オブジェクトにはユーザー属性が含まれます。そうです - はい、request.user でアクセスできます。

request.userとなる場合もありますのでご了承くださいdjango.contrib.auth.models.AnonymousUserrequest.user.is_authenticated()最初に呼び出して、「実際の」ユーザーを処理していることを確認する必要があります。

一般に、ModelForms で除外を使用することはお勧めできません。最初は良いアプローチのように思えますが、アプリケーションが大きくなり、この 1 つの非表示フィールドでユーザー モデルを変更すると、exclude に追加するのを忘れていました.. ;)

于 2013-11-07T08:19:35.777 に答える