0

問題があります。私はdjangoユーザーモデルをインポートし、新しいユーザーを作成してプロファイルを取得しようとしましたが、「プロファイル一致クエリが存在しません」というだけです。なんで?ユーザーを作成するだけです。

これが私のコードです:

from django.contrib.auth.models import User 
user = User.objects.create(username="stackoverflow", password="tester1234")
user.get_profile()
4

4 に答える 4

2

設定し忘れてるかも

AUTH_PROFILE_MODULE

あなたのsettings.py

于 2012-05-31T08:21:51.120 に答える
1

オンライン ドキュメントでは、get_profile()...

このユーザーのサイト固有のプロファイルを返します。現在のサイトがプロファイルを許可していない場合は django.contrib.auth.models.SiteProfileNotAvailable を発生させ、ユーザーがプロファイルを持っていない場合は django.core.exceptions.ObjectDoesNotExist を発生させます。サイト固有のユーザー プロファイルを定義する方法については、以下の追加のユーザー情報の保存に関するセクションを参照してください。

プロファイルを有効にしましたか?

コード スニペットから、別のクラスであるプロファイルをおそらく作成していないように見えます (こちらを参照してください。

于 2012-05-31T08:20:35.683 に答える
0

Django docs はこれを明確に定義しています。

ユーザーに関する追加情報の保存

ユーザーに関連する追加情報を保存したい場合、Django は、この目的のために「ユーザー プロファイル」と呼ばれるサイト固有の関連モデルを指定する方法を提供します。

この機能を利用するには、保存したい追加情報や利用したい追加メソッドのフィールドを持つモデルを定義し、モデルから User モデルに OneToOneField という名前の user を追加します。これにより、ユーザーごとにモデルのインスタンスを 1 つだけ作成できるようになります。例えば:

from django.contrib.auth.models import User

class UserProfile(models.Model):
    # This field is required.
    user = models.OneToOneField(User)

    # Other fields here
    accepted_eula = models.BooleanField()
    favorite_animal = models.CharField(max_length=20, default="Dragons.")

このモデルが特定のサイトのユーザー プロファイル モデルであることを示すには、設定 AUTH_PROFILE_MODULE に、ドットで区切られた次の項目で構成される文字列を入力します。

ユーザー プロファイル モデルが定義されているアプリケーションの名前 (大文字と小文字を区別) (つまり、アプリケーションを作成するために manage.py startapp に渡された名前)。モデル (大文字と小文字を区別しない) クラスの名前。

たとえば、プロファイル モデルが UserProfile という名前のクラスであり、accounts という名前のアプリケーション内で定義されている場合、適切な設定は次のようになります。

AUTH_PROFILE_MODULE = 'accounts.UserProfile'

ユーザー プロファイル モデルがこのように定義および指定されている場合、各 User オブジェクトには、そのユーザーに関連付けられたユーザー プロファイル モデルのインスタンスを返す get_profile() メソッドが含まれます。

メソッド get_profile() は、プロファイルが存在しない場合、プロファイルを作成しません。User モデルの django.db.models.signals.post_save シグナルのハンドラーを登録する必要があります。ハンドラーで、created が True の場合は、関連するユーザー プロファイルを作成します。

models.py で

django.contrib.auth.models から django.db.models.signals からユーザーをインポート インポート post_save

# definition of UserProfile from above
# ...

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

post_save.connect(create_user_profile, sender=User)
于 2012-05-31T08:34:38.490 に答える