ユーザーモデルの拡張に関するチュートリアルを行っていますが、動作するようですが、プロパティの呼び出し方法とコンストラクタに関する2つの質問がありました。まず、これはメインモデルは、ユーザに提示されます。このモデルのこのプロパティを呼び出す方法を理解できません
class UserProfile(models.Model):
user = models.OneToOneField(User)
likes_cheese = models.BooleanField(default=True)
puppy_name = models.CharField(max_length=20)
User.profile = property(lambda u : UserProfile.objects.get_or_create(user=u)[0])--->Statement A
今の形がある
問題のコードは、この
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('likes_cheese','puppy_name')
とこのフォームはようで提示ビューですこれは私の質問がここにあります(ここで私は単純にフォームを提示することに興味があり、他のコードを削除しました)。
def user_profile(request):
display_page = "profile.html"
csrf_token = csrf(request)
args={}
user = request.user
profile = user.profile ---------------------->statement B - Question 1 below
form = UserProfileForm(instance=profile) ------->statement C - Question 2 below
args.update(csrf_token)
args["form"] = form
return render_to_response(display_page,args)
今ここ
は私の二つの質問
Q1-ありえないパラメータはUser
オブジェクトのプロパティprofile
に渡されるのはなぜですか?
私が理解から声明から
User.profile = property(lambda u : UserProfile.objects.get_or_create(user=u)[0])
あるプロファイルは、ユーザーのプロパティとして定義され、それがパラメータを受け取るラムダであるセッター機能を持っていることをされていることです。そのパラメータはどこに渡されますか?私が見るすべては、この
profile = user.profile
form = UserProfileForm(instance=profile)
Q2は-でコードform = UserProfileForm(instance=profile)
我々は、パラメータとしてインスタンスを渡している(プロパティへのパラメータは、私が見ることができる場所であればどこでも渡されていません)ですが、私のUserProfileFormはありません。コンストラクタ?ここで何が起きてるの。
事前に感謝
sourceから、
instance
キーワード引数が与えているかどうかを確認すると、次のようにフォームを移入し、私はまだ理解しません値がパラメータとしてプロパティに渡されています –@JamesFranco私は答えを更新しました。 –