これは考慮事項としてご質問ください。誰かが以下の ソリューションのいずれかを使用するかもしれません。DjangoユーザーのHiddenInputと、クラスベースのビューを持つビューに直接保存する場合
私はForeignKey(User)
フィールドを含むいくつかのモデルを持っています。 クラスベースの作成ビューは、汎用CreateView
から派生しています。
新しいオブジェクトの追加時に関連するユーザーを保存するには、2つのオプションがあります:form_valid
メソッドをオーバーライドすることにより、ビューでフォームを保存する
は、隠しフィールドにユーザID格納さ(露出)でフォームを保存
class CreateOfferView(CreateView): model = Offer form_class = SomeModelFormWithUserFieldExcluded def form_valid(self, form): instance = form.save(commit=False) instance.user = self.request.user instance.save()
これは
user_id
を公開しない(および他のここで露出されるべきではないデータを言及していません)。 ここに難しい部分があります。ユーザーフィールドを持つモデルが増えています...フォームを作成するときに 初期(現在ログインしている)ユーザーでユーザーフィールドを入力する必要があり、そのフィールドを非表示にする必要があります。この目的のために私が使ってきた私のOwnFormMixin
class OwnFormMixin(object): def get_form(self, form_class): form = super(OwnFormMixin, self).get_form(form_class) form.fields['user'].widget = forms.HiddenInput() def get_initial(self): initial = super(OwnFormMixin, self).get_initial() initial['user'] = self.request.user.pk #I could also do this in get_form() with form.fields['user'].initial class CreateOfferView(OwnFormMixin, CreateView): model = Offer form_class = SomeModelFormWithAllFields
あり、よりCreateXXXView
使用OwnFormMixin
..あなたがフォームにユーザーデータを保存するにはどうすればよい
?
あなたのビューに直接保存しないでください。賛否両論は何ですか?あなたはにユーザーがそのForeignKeyField
を変更できるようにしている場合を除き
なぜ検証でrequest.userを使用しないのですか?他のユーザーからPOST aに返信する可能性はありますか?なぜ、djangoのユーザデータに関連するものも、フォームや可視部分に公開するのはなぜですか?それは潜在的な脆弱性です... – garmoncheg