請將此作爲考慮問題。也許有人會使用下面的 解決方案之一。Django用戶HiddenInput與使用基於類的視圖直接保存在視圖中
我有幾個模型,其中包含一個ForeignKey(User)
字段。 我的基於類的創建視圖來自通用CreateView
。
有兩個選項添加新對象時保存相關聯的用戶:
保存在通過重寫
form_valid
方法的意見的形式; 這並不暴露user_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()
與保存在一個隱藏字段存儲(和曝光)的用戶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
..
你如何保存在您的表單的用戶數據?
隱藏與保存直接在您的意見?什麼是優點/缺點?
爲什麼不使用request.user進行驗證?是否有可能從另一個用戶回答POST?爲什麼甚至將與django用戶數據相關的任何相關內容暴露給窗體或任何可見部分。這是一個潛在的漏洞... – garmoncheg